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 ↩