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言語

Go言語のエラーハンドリングとログローテーション

1 はじめに2 エラーハンドリング2.1 error インターフェース2.2 pkg/errors パッケージ3 独自のエラータイプ付き errorsパッケージを作成4 log パッケージ4.1 lo ...

laravel logo

[Laravel] middlewareでHTTPリクエストの前後に処理を入れる

1 はじめに2 middlewareとは3 実装3.1 middleware作成3.2 コード実装4 middleware定義4.1 常に呼び出す4.2 特定のURLにアクセスした時のみ呼び出す4.3 ...

rails

form_withでフォームの送信前に処理を行う方法

1 はじめに2 form_with3 サンプル4 さいごに5 参考 はじめに フォームを送信する前に処理を行いたいケース(Google Analyticsのイベントのトラッキングなど)があると思います ...

Stripe Connectを使って継続課金を実装

1 はじめに2 商品・価格の登録2.1 マイグレーション2.2 製品・価格登録処理の実装2.3 Stripe管理画面での確認3 サブスクリプション登録3.1 事前準備3.2 課金処理の実装3.3 St ...

rails

Railsで複合主キーのテーブルを扱う

1 はじめに1.1 前提条件2 実装例2.1 config2.2 マイグレーション2.3 モデル3 さいごに はじめに RailsでWebサービスを開発する際のDB設計では基本的にidが主キーになると ...

フォロー

blog-page_side_responsive

2021年10月
 12
3456789
10111213141516
17181920212223
24252627282930
31  

アプリ情報

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