The Gopher character is based on the Go mascot designed by Renee French.
TIGの辻です。
Go 1.17連載の5日目の記事です。本記事ではGo1.17の go get
に関するアップデートの詳細をお伝えします。
go get
に関する変更点サマリ
- モジュール外からの
go get
におけるコマンドインストール時に、警告を出力する go get
の-insecure
フラグは使えなくなった、代わりに環境変数GOINSECURE
を使う
モジュール外からの go get
におけるコマンドインストール時に、警告を出力する
go get
時の警告
Go1.16のリリースノートでも、コマンドのインストールで go get
を使うのは非推奨、とお知らせがありましたが、Go1.17では、モジュール外からコマンドのバイナリを go get
を使ってインストール1した場合、警告が出るようになりました。いよいよ次のGo 1.18のリリースでは go get
でコマンドのインストールができなくなりそうです。
- 非推奨なインストール方法
メインモジュール外で go get
してコマンドをインストールしようとすると、以下のように警告が出力されます。将来的には go get
時にデフォルトで -d
フラグが有効になるため、go get
でバイナリをインストールすること自体ができなくなります。
$ go get github.com/future-architect/awsmfa/cmd/awsmfa |
- 推奨されるインストール方法
コマンドのインストールは以下のように go install
を使いましょう。Go1.16の連載の Go 1.16のgo installについて の記事の中でも紹介していますが、Go1.16からツールなどの実行バイナリをローカル環境にインストールする場合に go install
でバージョンを指定してインストールできます。
go install github.com/future-architect/awsmfa/cmd/awsmfa@v1.1.1 |
将来的にデフォルトで go get
時に -d
オプションが有効になることの影響
将来的には go get
時はデフォルトで -d
フラグが有効になります。-d
フラグはソースのみをインストールし、ビルドは行われません。go.mod
ファイルを更新し、パッケージのビルドに必要なソースをダウンロードするだけです。
-d
がデフォルトで有効になると、go get
時はソースのダウンロードのみを行い、ビルドはしなくなるため、以下のような影響があります。
- 1.
go get
がより高速になる - 2.プラットフォーム依存のソースを、ローカルの環境でビルドできない場合、
go get
時にエラー報告しなくなる
1つ目のポイントは多くのGopherにとって嬉しいポイントかもしれません。
なぜ非推奨になったのか
Deprecation of ‘go get’ for installing executables に背景が書いてあります。端的に言うと「go get
の、コマンドをビルドしてインストールする機能が go install
と重複するため」ということです。
コントリビュートチャンス?!
おまけですが、多くのREADMEなどのドキュメントではGo製のコマンドをインストールする方法として go get
の手順を記載しています。golang
のリポジトリにもコマンドインストールで go get
を用いていた記述がいくつかありました。Goにコントリビュートしてみたい方はチャンスかもしれません。golang/review
2 などでも go get
としてコマンドをインストールする手順がまだドキュメントに記載されています。もちろんFutureが公開しているGo製のツールのドキュメントも今後アップデートしていく必要があります。
go get
の -insecure
フラグは使えなくなった、代わりに環境変数 GOINSECURE
を使う
go get
時に -insecure
を付与してコマンドを実行すると、-insecure
フラグはサポートされなくなった旨が表示されるようになりました。Go1.16のリリースノートでは将来 -insecure
フラグを削除するよ、とお知らせがありましたが、それが実現しました。
- Go1.17で
-insecure
フラグを付与してgo get
したときの例
$ go get -insecure github.com/future-architect/go-mcprotocol |
Go1.14から環境変数 GOINSECURE
が追加になっているので、安全でない方法でアクセスする必要があるときは環境変数 GOINSECURE
に対象のホストを指定しましょう。
- 1.ソースをダウンロードして、ソースからビルドしたバイナリを
$GOPATH/bin
に配備する、ということ ↩ - 2.https://github.com/golang/review/tree/2e4fd9a232c3368afeca71043fd7538ed11c681c ↩