HRBrain Advent Calendar 2024 17日目の記事です。
はじめに
こんにちは。yk_engrです。
Go言語で本格的に開発を進めるにあたり、ローカル環境の構築を改めて行うことにしました。その際に少し戸惑った点を備忘録として残しておきたいと思います。
記事作成時のスタック
Go 1.23.2
MacBook Air M3
Go言語自体のインストール方法、バージョン管理
公式サイトのインストール方法に従えば問題ないです。
https://go.dev/dl/
Go言語は後方互換性があるため、特定のプロジェクトで古いバージョンを固定する必要がない限り、最新のGoをインストールすれば問題ありません。
(インストールしたら、$GOPATH
が$HOME/go
に自動で設定されるはず)
なお、Homebrewでのインストール方法もありますが、ここでは割愛します。
モジュールモード
Go 1.11から、モジュール機能が導入され、それ以前のバージョンとの違いは以下のように呼び分けられています。
- GOPATHモード: バージョン1.10以前のパッケージ管理方法
- モジュールモード: バージョン1.11以降のパッケージ管理方法
モードによって、さまざまな部分で挙動が異なるので注意が必要です。
モードの切り替え
$GO111MODULE
でモードを切り替えられます。
-
$GO111MODULE=on
-> モジュールモード -
$GO111MODULE=off
-> GOPATHモード -
$GO111MODULE=auto
-> go.modがあればモジュールモード
Go1.16以降は、$GO111MODULE=on
がデフォルトで、モジュールモードが推奨されているため、この環境変数は触らない方が良いです。
ディレクトリ構造
Go1.11以降ならば、どこでも好きなところにプロジェクトを作成しても大丈夫です。
github.comを含めるか
ローカル専用のプロジェクトであれば自由に作成して問題はないですが、将来的にGitHubに公開する可能性がある場合は、モジュール名をGitHubのリポジトリURLと一致させておくと良いと思います。
プロジェクトの新規作成
$ mkdir myapp
$ cd myapp
$ go mod init myapp // go.modファイルが作成される
パッケージ管理
Go言語では、パッケージ管理にgo.modとgo.sumを用います。(モジュールモードの場合)
- go.mod: モジュール名と依存モジュールのバージョンが記載される
- go.sum: 依存モジュールのチェックサム情報が記録される
パッケージの追加
基本的には、以下で問題ないです。
- パッケージをインポート
import "github.com/gin-gonic/gin"
- go mod tidyを実行
$ go mod tidy
必要な依存関係はgo.modとgo.sumに追加され、依存関係のキャッシュは$GOMODCACHE
が設定されていればそのディレクトリに、設定されていなければ$GOPATH/pkg/mod
に保存されます。
特定のバージョンをインストールしたい場合は、go get
を使います。
$ go get <package-name>@v1.2.3
必要なパッケージが自動的にダウンロードされ、go.mod
とgo.sum
に追記されます。
CLIツールのインストール
go install
を使います。(Go1.16以降)
- goplsのインストール例
$ go install golang.org/x/tools/gopls@latest
上記のコマンドを実行すると、$GOBIN
が設定されていればそのディレクトリに、設定されていなければ$GOPATH/bin
にインストールされます。
キャッシュの削除
- ビルドキャッシュのクリア
$ go clean -cache
- モジュールキャッシュのクリア
$ go clean -modcache
まとめ
Go言語は比較的新しい言語で、特にGo1.11以降とそれ以前では変更点が多く、混乱しやすい部分があると思います。
今後、もしGo言語を触らなくなったときでも、この記事を見れば基本的な内容を思い出せるようにしたいと考えました。
PR
株式会社HRBrainでは新しいメンバーを募集中です。
興味がある方は下記のリンクからよろしくお願いいたします。