[備忘録]Goの基本的なことまとめ
Go 1.19、MacOSでの情報。情報が輻輳していたので自分用にまとめておく。
1. $GOPATH
Goワークスペースのルートとなる。明示的に指定しない限りは"~/go"となる。Goのツールチェーンのモードによって役割が異なる。以下の2種類があり、どちらかで動作する。
module-aware Mode: 1.19では基本的にこちら。標準ライブラリ以外の全てのパッケージをモジュールとして管理。モジュールの管理はgo.modファイルで行い、リポジトリのリビジョン毎に管理される。この記事は基本的にこのモード前提で書いている。
GOPATH Mode: 1.10まで。標準ライブラリ以外の全てのパッケージの管理を$GOPATH/srcで行う。
module-aware Modeでは$GOPATH配下には基本的に以下の2つのディレクトリが存在する。
$GOPATH/bin
go installコマンドでビルドしたバイナリのデフォルトの格納先。なおこのディレクトリは環境変数$GOBINで任意の場所を指定できる。
$GOPATH/pkg/mod
module-aware modeでのダウンロードしたモジュールの格納先。go mod tidyコマンドなど、新規モジュールの追加の際はこのディレクトリを参照する。モジュールが存在しなければダウンロードもしてくる。なおこの際キャッシュは$GOPATH/pkg/mod/cache内に保存される。キャッシュの保存先のパスも環境変数$GOCACHEで変更できる。
2. $GOROOT
Goをインストールした場所。インストール環境によって異なる。
3. モジュールの管理
モジュールの管理はリポジトリのリビジョン毎に行われる。初期化とするためには、以下のコマンドでgo.modファイルを生成する。
go mod init モジュール名
他のモジュールから呼び出す際は、ここで設定したモジュール名を使用する。
コードにimport文を記述した後にgo.modに反映するには、以下のコマンドでコード内でimportしたモジュールをgo.modに紐づける。
go mod tidy
新規モジュールの追加だけでなく不要なモジュールの削除も行なってくれる。
go get, go modについて
go getはGo1.18以降よりgo.modを編集するためだけのコマンドとなった。(1.18以前はバイナリのインストールもできたがgo installに取って代わられ、その機能は削除された)
go getによるgo.modの編集
新規モジュールの追加
1. コードにimport文が記述してある場合
go get #
2. importされていないモジュールを追加する場合
go get module@version
go getでもgo.modの編集は可能だが、結局go mod tidy一つで全て賄える。
この記事が気に入ったらサポートをしてみませんか?