Goenv の代わりに mise で Go のバージョンを管理する。

一旦もともと入っている Go 言語を削除します。

・HomebrewでインストールしたGoの削除

Homebrew経由でインストールされている複数のGoバージョンをすべて強制削除します。

brew uninstall --force go

・直接インストールしたGo(公式パッケージ版)の削除

公式のインストーラーで入れたGoの実体と、システムがPATHを通すために作成したファイルを削除します。

Goの実体ディレクトリを削除

sudo rm -rf /usr/local/go
sudo rm /etc/paths.d/go

mise でGoをインストールする

# Go 1.26 のインストール
mise install go@1.26

# グローバル(マシン全体)のデフォルトバージョンを 1.26 に設定
mise use -g go@1.26

vscode , cursor で Go 関連の拡張機能をアップグレードする。

Command + shift + P → Go Install/Update Tools を選択
No.2748
06/09 10:34

edit

Goのジェネリクス

Go の interface{} → any

Go 1.18 でジェネリックス(Generics)が導入され、それに合わせて any が追加された。

any は新しい型ではなく、interface{} のエイリアスである。

type any = interface{}

そのため、以下は完全に同じ意味になる。

map[string]interface{}
map[string]any

現在は Go の公式コードやコミュニティでも any が推奨されることが多く、 モダンな Go コードでは interface{} より any がよく使われるので、覚えておきましょう。

No.2747
06/09 09:28

edit

Go ECHO で ログを JSON形式、LTSV形式にする

// LoggerミドルウェアをJSON形式で
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
    Format: `{"time":"${time_rfc3339}","method":"${method}","uri":"${uri}","status":${status},"latency_ms":${latency_ms},"remote_ip":"${remote_ip}","error":"${error}"}` + "\n",
}))
// LoggerミドルウェアをLTSV形式で
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
    Format: "time:${time_rfc3339}\tmethod:${method}\turi:${uri}\tstatus:${status}\tlatency_ms:${latency_ms}\tremote_ip:${remote_ip}\terror:${error}\n",
}))
No.2668
10/14 22:40

edit

Go ECHO の Recoverミドルウェア

	// Recoverミドルウェア(panicをキャッチしてログ出力)
	e.Use(middleware.RecoverWithConfig(middleware.RecoverConfig{
		LogLevel: log.ERROR,
	}))
No.2667
10/14 22:37

edit

Goのビルドタグ

● Goのビルドタグとは?

Go のソースコードに「このファイルをどの条件でビルド対象に含めるか」を指定する仕組みです。
複数の環境(OS、アーキテクチャ、機能の有無など)で異なるソースを切り替えるのに使います。

● Goのビルドタグの書き方

//go:build staging

● 例えば以下のビルドタグを設定するとどうなるのか?

//go:build staging

とすると、staging が 有効な場合のみこのファイルが読み込まれます。

● IntelliJ や Goland で設定する

添付ファイル1
go-tags.png ( 114.0 KBytes ) ダウンロード
No.2650
09/10 13:08

edit

添付ファイル

MacにGo をインストールする

● MacにGo をインストールする

brew install go

● GOROOT と GOPATH と を確認します。

go env GOROOT
go env GOPATH

go の環境変数全てを確認する

go env

● gopls(Language Server)のインストール

go install golang.org/x/tools/gopls@latest

goplsがインストールされた場所を確認

ls -la $(go env GOPATH)/bin/gopls

GOPATHのbinディレクトリを確認

echo $(go env GOPATH)/bin

PATHに含まれているか確認

echo $PATH | grep -o "$(go env GOPATH)/bin"
.bash_profile などに追記する
code .bash_profile 

.bash_profile

# goplus
export PATH=$PATH:$(go env GOPATH)/bin

● goplsコマンドの確認

gopls version
golang.org/x/tools/gopls v0.20.0
No.2630
08/07 23:43

edit

Go の New 命名規則

● Go の New 命名規則

・関数名としての NewXxx

New というプレフィックスを持つ関数名は、特定の型や構造体の新しいインスタンスを生成するためのコンストラクタ関数として使われます。

func NewXxx(parameters) *Xxx {
    return &Xxx{...} // Xxx構造体のポインタを返す
}

type person struct {
	height float32
	weight float32
}

func NewPerson(height, weight float32) *person{
	return &person{height: height, weight: weight}
}

func main() {
	p := NewPerson(182.0, 75.5)
	fmt.Println(p) // &{182 75.5}
}

引用: https://qiita.com/gold-kou/items/4494f8b69b8fa53d5e93

・ Newの代わりにCreateは使える?

CreateXxx が使われる場合
CreateXxx は、オブジェクトやリソースを生成・初期化するプロセスがより複雑な場合や、外部システムとの関わりがある場合に使用される傾向があります。例えば、以下のようなケースです:

外部リソースの作成が関与する場合

ファイル、ネットワーク接続、データベースエントリなど。
外部リソースの作成に失敗する可能性があり、エラーを返す必要がある。
生成プロセスが単純ではない場合

内部で複数のステップが必要だったり、リソースの確保や設定が絡む場合。
明確に「作成」という意味を強調したい場合

「新しいインスタンスを返す」以上の動作を表現したいとき。

No.2571
11/22 19:39

edit