[備忘録]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一つで全て賄える。

この記事が気に入ったらサポートをしてみませんか?