go installとgo getをどう使い分ければ良いのか調べた
はじめに
最近、Goを使い始めたのですが、goimportsやgolintなどの開発ツールをローカルにインストールするためには、go install
とgo get
のどちらを使えば良いか分かりませんでした。
go install
とgo get
について調べたことをまとめ、備忘録として残したいと思います。
Goのバージョンは1.16であることを前提に考えます。
つまり、Go Modulesを使用して開発することが前提になります。
この記事が他の人の参考になれば幸いです。
また、この記事の内容に間違った記載がありましたら、指摘していただけるとありがたいです。
環境
名前 | バージョン |
---|---|
macOS Big Sur | 11.2.1 |
Go | 1.16 |
go installについて
go install
は依存関係にあるパッケージも含めてコンパイルして、作成したバイナリの実行ファイルを適切な場所(デフォルトでは$GOPATH/bin
や$HOME/go/bin
)に配置するコマンドです。
サフィックス(@latestや@v1.0.0など)をつけてバージョンを指定して、インストールすることもできます。
go installの使い方
go install [build flags] [packages]
という形式で使用します。
例えばgoimportsをインストールするには以下のようなコマンドになります。
go install golang.org/x/tools/cmd/goimports@latest
go getについて
go get
は現在のモジュールに依存関係を追加して、インストールするコマンドです。
モジュール間の依存関係を解決し、go.mod
を更新して、ソースコードをダウンロードし、パッケージをインストールします。
go install
と同じようにサフィックスをつけてバージョンを指定して、依存関係に追加できます。
go getの使い方
go get [-d] [-t] [-u] [-v] [-insecure] [build flags] [packages]
という形式で使用します。
依存関係から削除する場合はサフィックスを@none
とします。
-u
オプションでパッケージのマイナーリリースやパッチリリースがあれば、それをインストールします。
他のオプションについてもAdd dependencies to current module and install themに載っています。
go installとgo getの使い分けについて
大きな違いは、go install
はgo.mod
を書き換えませんが、go get
は書き換えるという点です。go.mod
は、Goにおいて依存関係などを管理するものです。
よって、現在の作成しているモジュールと依存関係のある(ソースコード内でimportする)パッケージをインストールするときはgo get
を用いて、それ以外でインストールするときはgo install
を用いて良いと思います。