Go関連のことを調べてみた

Go関連のことを調べてみた

レスポンスボディに書き込んだ内容を置き換えるginのミドルウェアを作った

レスポンスボディに書き込んだ内容を置き換えるミドルウェアを作った。

https://github.com/ophum/gin-replacer

“`go
r := gin.Default()
r.Use(ginreplacer.New(&ginreplacer.Config{
Replacer: strings.Replacer(“old”, “new”),
}))

r.GET(“”, func(ctx *gin.Context) {
ctx.String(http.StatusOK, “old”)
})
“`

上記のようなコードを書いて `/`に`GET`すると `new`と返ってくる。

“`
$ curl localhost:8080
new
“`
## 具体的な利用例

注意: 作ったばかりなので本格的には使えてない

exampleでも実装しているけど、フロントエンドの静的ファイルを返す際に、APIのbaseURLなどを動的に変えたい場合。

https://github.com/ophum/gin-replacer/blob/f9b15510e45a

元記事を表示

SQLServerに繋がらないとき…

プログラムからSQLServerに繋がらないときに見る記事です :eyes:

## SQLServerがリッスンしてしているか?
SQLServer構成マネージャー `SQL Server Configuration Manager` を開いて状態が”実行中”であるかを確認します。変更を加えた場合、再起動が必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482880/4ec73737-65bf-a801-9234-12a76e537491.png)

`TCP/IP`が有効になっているかを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482880/6e329a1d-b8e0-5a41-21db-cb354023f487.png)

`TCP/IP`のプロパティにてTCPの静的ポート番号を指定します。
![image.png](https://qiita-image

元記事を表示

Go言語初学者がエラーに立ち向かう方法: fmt.Printfデバッグ、エラーハンドリング

# なぜエラーになったかを考える
### ①直近で自分は何をやっていたかを考える!
### ②エラー文の内容をみる!
### ③文法があっているかを考える!

# fmt.Printfデバッグ
fmt.Printfデバッグを使用することで、スコープ内で呼ばれているかや、変数の中身の型や値が自分の意図するものになっているかを確認することができます。

**fmt.Printfデバッグの例**
“`Go:main.go
fmt.Printf(“CustomerNameError: %v\n”, customerName)
//fmt.Printf(“任意の命名: %v\n”, 中身を見たい変数)
“`
複数のfmt.Printfデバッグを作成し、エラーの原因の箇所を探す。

**実践例**
“`Go:main.go
fmt.Printf(“CustomerNameError①!!!: %v\n”, customerName)
row := db.QueryRow(“SELECT id FROM members where name = ?”,customerName)
fmt.Pri

元記事を表示

GoのExcelizeでExcelのセル値読み取り・R1C1形式の変換

[前回の記事](https://qiita.com/te-k/items/cbde3a34577eb6c84f26)の続きで、`.xlsx`に変換したExcelファイルを操作してみます。

ライブラリには、[Excelize](https://github.com/qax-os/excelize)を使います。

“`bash
go get github.com/xuri/excelize/v2
“`

## Excelの指定セルの値を読み取る
`Excelize`の機能を使って、最初のシート
“`go
package main

import (
“fmt”

“github.com/xuri/excelize/v2”
)

func main() {
path := “sample.xlsx”

// Excelで操作
f, err := excelize.OpenFile(path)
if err != nil {
fmt.Println(“error opening excel file: %w”, err)
}

元記事を表示

Goでコンソールアプリのexeファイルを実行する

前回、[C#でExcelの.xls形式を.xlsx形式に変換](https://qiita.com/te-k/items/902cdded0793acb58586)する`exe`ファイルを作ったので、それをGo言語で呼び出してみます。

C#でビルドした実行ファイルは、以下のように配置しました。
“`
C:.
│ go.mod
│ main.go

└─net6.0
ExcelConverter.deps.json
ExcelConverter.dll
ExcelConverter.exe
ExcelConverter.pdb
ExcelConverter.runtimeconfig.json
“`

`Go`の`os/exec`を使って`exe`を呼び出します。
“`go
package main

import (
“fmt”
“os/exec”
)

func main() {
exePath := “./net6.0/ExcelConverter.exe”

arg1 := “

元記事を表示

C, C++ユーザのためのGo言語 型編

#### 宣言のしかた
– “`go
// 基本
var value int
// まとめて宣言
var (
value int
text string
)
// 宣言と初期化を同時に行う
value := 8 // valueはint型に
test := “hello” // valueはstring型に
“`

#### ポインタ
– 概要:
– C言語と基本的に同様(&、*など)
– C++のような参照渡しは無い
– 例:
“`go
var num *int
num = new(int) // まとめて`num := new(int)`でも勿論可
*num = 10
fmt.Println(num)
fmt.Println(*num)

// 結果
0xc0000140a0
10
“`

#### 構造体とインターフェース
– 概要:
– 構

元記事を表示

Golang 用デバッガ delve のコマンド紹介

Golang 用のデバッガ _delve_ についてお話します。

# What is delve

_[delve](https://github.com/go-delve/delve)_ とは、Golang 用のデバッガです。
_Golang_ で作成したアプリケーションに何か不具合があったときに利用する便利ツールです。

– nil ポインタ panic が発生したのが `FindBy()` っぽいんだけど 、実行したとき変数に何がセットされているのか知りたい
– `Execute()` 関数が呼ばれるまでにどういう経路をたどったのか知りたい

といったときにその問題の解決に資するものです。

C 言語でコンパイルした実行ファイルをデバッグする際に _[gdb](https://ja.wikipedia.org/wiki/GNU%E3%83%87%E3%83%90%E3%83%83%E3%82%AC)_ を使ったことがある人、ただの _Golang_ 用の _gdb_ です。
コマンド一覧だけ見て読了していただいて構いません。

# How to install

Check

元記事を表示

sqlite3-Mac

「前提」
Udemyの講座を学習中の初学者が何故?そうなるのか説明のない講義で分からなかった点をchat GPTやGoogle検索で模索した回答になります。ご了承下さい
_______________________________________________________

SQLiteをインストールする手順は、使用しているオペレーティングシステムによって異なりますが、一般的な方法を以下に示します。

1. Linux (Ubuntuを例として),Windowsは省きます(?)

2. macOS 
macOSには通常、SQLiteがプリインストールされています。ターミナルでsqlite3コマンドを実行して、SQLiteシェルを開始できます。
※既にインストールされている場合、☑️までスキップ

“`
aqlite3
//sqlite3 インストール確認
sqlite> .exit
//sqlite3 を抜ける
“`
_____________

① Homebrew(brew)のインストール:
ターミナルに次のコマンドを入力して、Homebrewをインストールします

元記事を表示

[Go] 並行処理を30分で理解?

# Goroutinesってなに?

[educative](https://www.educative.io/answers/what-is-a-goroutine)には、以下のように書いてあります。

>ゴルーチンとは、Goプログラミング言語における軽量の実行スレッドであり、プログラムの他の部分と同時に実行される関数です。
ゴルーチンは、従来のスレッドと比較すると、ゴルーチンを作成するオーバーヘッドが非常に小さいため、驚くほど安価です。そのため、Goでは並行プログラミングに広く使われています。
関数をgoroutineとして呼び出すには、goキーワードを使用します。

なるほど、わからん。まぁとりあえず、 **同時に実行される** ということですね。

# コードのテンプレート
2つの関数 **`heyko1()`** と **`heyko2()`** が同時に実行される(並行処理される)ための関数 **`main()`** を作成します。

goroutinesを呼び出すときには、基本的には呼び出すところで関数の前に`go`をつけることで並行処理として利用できます。これだけ

元記事を表示

Dockerで環境構築(GIN(GO)+Air)

# はじめに
初めまして!
エンジニアになって数年、今まで本を読むだけでしたが、もっとプライベートで楽しみながら成長したい!自分が学んだ足跡を残していきたい!と思い記事をかきました!
最終的には自在に開発できるようになりたいと思っています。:triumph:
いろいろな記事を参考にさせてもらっています。:bow_tone2:
その中でもこれってどういう意味?とかつまづいたところを念入りに書いていこうかと思います。:fist:

# 今回の目的
友人と進めているアプリ開発でGINを使おうって話が上がりました!折角だからDockerで立ち上げたろう、と思ったのでイチからどう進めていったか書いていきます!

# 作成した環境
https://github.com/takizawa0548/sample-gin

# 使用したものや事前準備
・Macbook Pro
・GIN(GO)
・Air
・Docker

# 主に参考にさせていただいた記事
https://go.dev/doc/tutorial/getting-started

https://gin-gonic.com/ja/doc

元記事を表示

Goでポインタを使うのか値を使うのかで迷ったこと

## はじめに
タイトルの通りです。
実際の業務の中で、ポインタの使いをなんとなくでやってたなとおもい、まとめてみました。
また、ケースの紹介の箇所はプロジェクトのルールや方針等もあると思うので、
あくまで私の理解と私の経験だと理解してください。

## ポインタって?
ポインタはメモリのアドレスを指します。
ポインタは「値がどこにあるのか」を示すもので、値自体ではありません。
Go言語では以下のようにポインタを使用できます。
“`go
package main

import “fmt”

type Fruits struct {
Name string
Color string
}

func main() {
// Fruitsをポインタ型でappleに使用する
apple := &Fruits{
Name: “りんご”,
Color: “red”,
}

fmt.Printf(“apple :%+v\n”, apple)
fmt.Printf(“appleに格納されているアドレス :%p\n”, apple)
}
“`
実行結果

“`
app

元記事を表示

【個人開発】初心者がもんたの森というな無料画像サイトを作った話

はじめまして!もんたです。

最近、趣味で作った『**もんたの森**』っていう無料で画像を保存したりコピーしたりできるサイトを作ったので、学んだことのアウトプットとしていろいろ話していきます!

初心者の人がこの記事見て個人開発にチャレンジしてもらえればなと思います!

あ、そういえばいろいろやらせてもろてます。
よかったら覗いてみてあげてください。

**【最近始めたnote】**
趣味で読んだ本について書いてます

https://note.com/kadota0706

**【あまり使っていないX(Twitter)】**
描いた絵をシェアしたりしてます

# 今回作ったやつ
https://montanomori.com/

![vpd3o-h3ckx.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2038763/e0aee1ad-7a93-f337-df96-fde8acbb919e.gif)

# 背景
時は

元記事を表示

わたしとゴリラとジンと


わたしとゴリラとジンと

**ゴリラ・ゴリラ・ゴリラ**

エンジニアはB型が多いらしいです。

ゴリラは全員B型らしいです。

つまりゴリラはエンジニアってこと?

エンジニアがゴリラってこと?

ゴリラとエンジニアの間をとって

ゴジラにしましょう(謎提案)

**目次**
– [1. gorillaとは何か](#1-gorillaとは何か)
– [2. gorillaとginの違い](#2-gorillaとginの違い)
– [3. おわりに](#3-おわりに)

## 1. gorillaとは何か

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3493200/9b09366c-7472-7e6a-c0a3-94e747922be0.png)

[Gorilla, the golang web toolkit](https://gorilla.github.io/)

 ゴリラは、霊長目ヒト科ゴリラ属

元記事を表示

AWS+Lambda+API+GOでオウム返しLine Bot

# はじめに
– 「AWSとGoを勉強したい!」ということで、オウム返しをするLine Botを作成しようと思いました。
– AWSを使ったサーバーレスの基本の勉強にもなってよかったです!

# 目標
– 以下の感じでオウム返ししてくれるbotを作成します。
![oumu_kansei.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3525798/a1e1c91b-42f7-49c5-9445-6436b0eeb809.png)

# 全体の構造
– Lineにメッセージを送ると、LINEプラットフォームは設定されたWebhook URLに対してPOSTリクエストを送信する。
– API Gatewayは、このリクエストをトリガーにLambda関数を実行する。
– Lambda関数はGo言語で書かれたコードを実行する。

![line_bot_aws_oumu.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

GoとReactでAPI通信

## 目的

前回、GoとReact環境をdockerで構築
https://qiita.com/zukka/items/5a6831bef702d8c910e0

次は、フロント側のReact側からGoのAPIを呼び出して出力されたテキストをフロントに表示することを目標に。

## GoでAPIを構築

### webフレームワークGinを使う

GinはGo言語ベースのWebアプリケーションフレームワーク
軽量かつ実行速度が速いということが特徴

https://gin-gonic.com/ja/

### インストール
go-sampleというモジュール名で初期する
go mod init は新しいGoモジュールを初期化するためのコマンド

“`sh
docker-compose run –rm go sh -c ‘go mod init go-sample’
“`

WEBフレームワークのginを取得する

“`sh
docker-compose run –rm go sh -c ‘go get -u github.com/gin-gonic/gin’
“`

#

元記事を表示

[翻訳転載] Golang Tip #5: メソッドチェーン

# はじめに

https://qiita.com/a10a/items/5063899c9f4a3bf4a2f2

本記事は以下のツイートの翻訳転載です。

https://x.com/func25/status/1728354658673135697?s=20

メソッドチェーンについての内容になります。

# メソッドチェーン

メソッドを定義する場合、レシーバをそのまま返してください。

![image](https://pbs.twimg.com/media/F_xXycNbIAEeZXb?format=jpg&name=medium)

これはメソッドチェーンとして知られています。
複数のメソッドを流れるように連続して呼び出すことができる方法を実現することができ、クリーンで効率的なコードを生み出すことができます。

![image](https://pbs.twimg.com/media/F_xZWsXbUAArmOe?format=jpg&name=medium)

# おわりに

個人の感想ですが、メソッドチェーンを設計できていると「お、できるやつだ」ってなります。

元記事を表示

[翻訳転載] Golang Tip #4: 配列をスライスにパースする

# はじめに

https://qiita.com/a10a/items/5063899c9f4a3bf4a2f2

本記事は以下のツイートの翻訳転載です。

https://x.com/func25/status/1727651590667158013?s=20

スライスを配列にパースする方法についての内容になります。
(記事タイトルは転載元Post(`Parse an Array into a Slice`)より)

# 配列をスライスにパースする

`copy()`を検討しますよね。

![image](https://pbs.twimg.com/media/F_nWt6qawAA1dkl?format=jpg&name=medium)

しかし、これは冗長です。

もしプロジェクトがGo 1.20にアップデートされていれば、より簡単にパースすることができます。
他の型のパース(例えば`int`から`int32`)と同様です。

![image](https://pbs.twimg.com/media/F_nXliRaoAAAgLk?format=jpg&name=medium

元記事を表示

[翻訳転載] Golang Tip #3: パフォーマンスを考慮したスライスの初期化

# はじめに

https://qiita.com/a10a/items/5063899c9f4a3bf4a2f2

本記事は以下のツイートの翻訳転載です。

https://x.com/func25/status/1727362895514943975?s=20

スライスの初期化についての内容になります。

# パフォーマンスを重視したスライスの初期化[^1]

[^1]: `pre-allocation`

なぜパフォーマンスを考慮する必要があるのかについては次のPostを参照してください。

https://x.com/func25/status/1727363227749961777?s=20

以前は、`make(a, 10)` を使って初期化していました。

が、結果的に先頭に意図しないゼロを大量に含んでしまう`append()`(画像参照)を頻繁に手癖で書いてしまっていました。

これを避けるために、現在ではより効果的な初期化の方法である `make(a, 0, 10)` を使うようにしています。

![image](https://pbs.twimg.com/medi

元記事を表示

[翻訳転載] Golang Tip #1: 1行のコードで関数の実行時間を計測する

# はじめに

https://qiita.com/a10a/items/5063899c9f4a3bf4a2f2

本記事は以下のツイートの翻訳転載です。

https://x.com/func25/status/1725431804667244715?s=20

[Tip #2のマルチステージdefer](https://qiita.com/a10a/items/890dee753883decbfd42)を使用する方が良いと思う。

このPostをした後に改善版としてTip #2をPostしたのかもしれない

# Golang #1: 1行のコードで関数の実行時間を計測する

![image](https://pbs.twimg.com/media/F_H3DlDasAA_9SH?format=jpg&name=medium)

元記事を表示

Ubuntuでaptを用いずGoインストール

[CircleCIのcimg-go](https://github.com/CircleCI-Public/cimg-go/blob/main/1.22/Dockerfile)や、公式の[インストール手順](https://go.dev/doc/install)を参考に作成。

Install:

“`sh
## バージョン情報を記載
$ GO_VER=”1.22.0″
$ ARCH=”amd64″

## ダウンロード
$ curl -sSL “https://go.dev/dl/go${GO_VER}.linux-${ARCH}.tar.gz” | sudo tar -xz -C /usr/local/

## PATHを通す
$ echo ‘export PATH=$PATH:/usr/local/go/bin’ >> ~/.bashrc
$ echo ‘export PATH=”$(go env GOPATH)/bin:$PATH”‘ >> ~/.bashrc

$ source ~/.bashrc

## 動作確認
$ go version
go version go1.

元記事を表示

OTHERカテゴリの最新記事