BackEnd

Go 1.16でのgo getとgo installの変更点

投稿日:2021年10月11日 更新日:

はじめに

Go 1.16 から、 go getgo install の役割が明確に分かれました。今回は、 Go 1.16 からこれらのコマンドがどのように変わったかを紹介します。

go getとgo installの役割

大雑把に分けると、 go getgo.mod を編集するためのコマンドに、 go install はバイナリのビルド、インストールのためのコマンドにと、役割が分かれました。

次からは、それぞれのコマンドについて、もっと詳しく見ていきます。

go getの役割

go getgo.mod の編集と依存関係の解決を行います。

ちなみに、 Go 1.16 の段階では、まだバイナリのインストールまで行われます(1.17ではインストール時に警告がでるようになり、1.18ではインストール機能が削除される予定です)

なお、コードにimport文を書いてから go mod tidy を実行するれば、不要なモジュールの削除と新規のモジュールの追加が行われるので、 go get は使わなくても良いかもしれません。

go installの役割

go install はバイナリのインストールを行います。下記のように、パッケージ名とバージョンの指定が必須です(最新版をインストールする場合は latest でも可)

go install すると $GOPATH/bin/ にダウンロードされます。

このように、 go install では go.mod の変更が行われません。

この変更で何が改善されたのか

この変更で具体的に何が改善されたのかというと、変更以前はグローバルにツールをインストールするには、 go get コマンドが使用されていましたが、上でも書いたとおり、 go get コマンドは go.mod の編集も兼ねているため、不用意な go.mod の更新が行われる可能性がありました。

go.mod を変更せずにツールだけインストールするには以下の手順が必要でした。

  1. go.mod のあるディレクトリから抜ける
  2. ツール側の go.mod を有効化する
  3. go get を実行する

実際のコマンドは下記のようになります。

これを毎回実行する必要がありました。それに比べると、 go install コマンド一発で済むようになったのはありがたいですね。

go:generateと併用する

go:generate で外部パッケージを直接実行するには、以下のように記述する必要があります。

さらに、 Go 1.17 からは、外部パッケージを直接実行できるようになったので、以下のように書くことができます。

その他のgo.mod関連の変更点

Go 1.16 では、 go buildgo test を実行した際に、自動で go.mod が変更されなくなりました。import文を変更した場合は go mod tidy を実行しておきましょう。

さいごに

今回は、 Go 1.16 から go getgo install がどのように変わったかを紹介しました。

おすすめ書籍

改訂2版 みんなのGo言語 スターティングGo言語 (CodeZine BOOKS)

blog-page_footer_336




blog-page_footer_336




-BackEnd
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

Go言語

goroutineとchannelとContext

1 はじめに2 並行処理と並列処理3 goroutine4 channel4.1 channelからデータ受信4.2 for-range でのデータ受信4.3 複数のchannelを受信4.4 buf ...

Go言語

Go言語で使えるORMライブラリ

1 はじめに2 ORMライブラリ2.1 GORM2.2 SQLBoiler3 GORMを使ってみる3.1 導入3.2 migration3.3 insert3.4 select3.5 update3. ...

Go言語

Go 1.18のWorkspacesモードでマルチモジュール化

1 はじめに2 マルチモジュール構成2.1 非Workspacesモードの場合2.2 Workspacesモードの場合3 go workコマンド3.1 init3.2 edit3.3 sync3.4 ...

Vue.js+TypeScriptな環境整備

1 はじめに2 vue-cliのインストール3 プロジェクトの作成3.1 機能の選択3.2 シンタックスの選択3.3 CSSプリプロセッサの設定3.4 Unit test3.5 E2E test3.6 ...

laravel logo

Laravelでテストコードを書くには? Featureテスト/Unitテスト

1 はじめに2 FeatureとUnitの使い分け3 テスト用データベースの準備4 Featureテスト4.1 テスト対象のコード4.2 テストコードの実装4.3 テスト結果の検証4.3.1 ステータ ...

フォロー

blog-page_side_responsive

2021年10月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。