Modules【Go】
Goのversion 1.12以降では、$GOPATH/src以下のパッケージ管理を改め、go.modによって依存関係を管理できるようになりました。
まずは、Goのversionを確認し、必要に応じて最新化します。
$ go version $ brew upgrade go
Modulesを試すには、下記コマンドにより環境変数を設定します。
$ export GO111MODULE=on
VS Codeでは、起動時に環境変数を読み込むので、開いている途中でgo modを導入した場合には、再起動しないと、エディタ上のエラーが表示され続けるので注意します。
なお、1.13ではデフォルトで有効になるそうです。
この環境変数の設定は、bashファイルなどに設定して自動実行させない限り、毎回シェルの起動時に手動で打ち込む必要があるので、下記コマンドを実行し、自動的に実行させるのがオススメです。
// ログイン時に実行されるファイル $ nano ~/.bash_profile // シェル起動時に実行されるファイル $ nano ~/.bashrc
go.modは下記コマンドにより作成します。
$ go mod init // init の後に任意のディレクトリを指定できる // go modコマンドは、go help modで確認できる
これによって、dep コマンドは実行不要になり、importに記載された依存関係がgo buildやgo test時に自動的に解決されます。
明示的に依存関係の解決を行いたい時は、下記コマンドを実行します。
ローカルにキャッシュされるため、エディタ上のエラーを消し去りたい時に使えます。
$ go mod download
また、不必要な依存関係を削除したい場合には、下記コマンドを実行します。
$ go mod tidy
会社などで運用しているリポジトリを持ち、商用環境がある場合には、商用環境用のDockerfileを利用してgo mod tidyを実行すべきです。なぜなら、上記コマンドの場合、ローカル環境での依存関係を考慮した結果となるからです。
プロジェクトのディレクトリで、下記コマンドを実行し、go mod tidyを1度するためだけのコンテナを起動します。
$ docker-compose run --rm --no-deps api go mod tidy
上記は一度だけコマンドを実行するrunを使って、起動が終わったら削除するrmオプションを指定、さらにdocker-compose.yamlで、linksまたはdepends_onに指定されたサービスは起動しないno depsオプションを利用しています。指定サービスであるapiにて、コマンドgo mod tidyを実行します。apiは、docker-compose.yamlに記載されているserviceの1つです。