go1.17からgo getでのパッケージ導入が非推奨になった

go1.17から go get でのパッケージインストールが非推奨になりました。代わりに go install を使えということなので簡単に調査しました。

go get の代わりに go install を使う

go get prints a deprecation warning when installing commands outside the main module (without the -d flag). go install cmd@version should be used instead to install a command at a specific version, using a suffix like @latest or @v1.2.3. In Go 1.18, the -d flag will always be enabled, and go get will only be used to change dependencies in go.mod.

https://golang.org/doc/go1.17#go-get

go get でメインモジュール外にパッケージをインストールする際に警告が出るようになりました。

-d オプションをつけて実行すれば引き続き go get でもOKですが、1.18から -d オプションも使えなくなるようです。

そのため、代わりに go install を使えとのこと。

go getgo install の使い分け

go get が完全に使えなくなるわけではないようです。

モジュール内で管理したいパッケージについてはこれまで通り go get

go install はモジュール外で使いたいパッケージのインストールに使うことになるとのことです。

go getgo install

go install の使い方は下記のような感じです。

# go getの場合
go get golang.org/x/tools/gopls

# go installの場合
go install golang.org/x/tools/gopls@latest

3点リーダ(…)で、特定のディレクトリ配下のツールをまとめてインストールできたわけですが、それもこれまで通り使えます。

# go getの場合
go get golang.org/x/tools/cmd/...

# go installの場合
go install golang.org/x/tools/cmd/...@latest

参考資料