依存の追加と利用
go getは、指定したモジュールを依存関係に追加し、ソースコードをマシン上のモジュールキャッシュへダウンロードします。モジュールキャッシュの既定の配置場所は$GOPATH/pkg/modで、複数のプロジェクト間で共有されます。プロジェクト直下にライブラリ用のディレクトリは作られず、依存関係はgo.modに記録されます。
go get rsc.io/quote取得したパッケージをコード内で使うには、ソースファイルでimportを宣言します。
package main
import (
"fmt"
"rsc.io/quote"
)
func main() {
fmt.Println(quote.Hello())
}go run .fmtなどの標準ライブラリはGo言語のツールチェーンに含まれているため、go getで追加する必要はなく、go.modにも記録されません。
go.modとgo.sum
依存を追加すると、go.modにrequireディレクティブが追加されます。ここに記録されるバージョンは固定値ではなく、ビルドに必要な最小バージョンです。依存先モジュールがより新しい最小バージョンを要求している場合は、すべての要求を満たすバージョンが自動で選ばれます。公開されている最新バージョンへ勝手に更新されるわけではありません。
module example.com/demo
go 1.26
require rsc.io/quote v1.5.2依存の追加に伴い、チェックサムを記録するgo.sumも作成または更新されます。ダウンロードしたモジュールの内容が将来にわたって改ざんされていないかを検証するためのファイルです。依存関係を定義するgo.modと、その完全性を保証するgo.sumは、どちらもソースコードと一緒にGitなどのバージョン管理に含めます。
requireの行末に付く// indirectは、現在のモジュールから直接importされていない間接依存を表します。依存先モジュールが内部で利用しているモジュールや、go getで追加したもののコード上でまだimportしていないモジュールに付与されます。ソースコードで直接importして利用を始めると、この表記は自動で外れます。手動で編集する必要はなく、go getやgo mod tidyによって管理されます。
go mod tidyによる同期
go getを使わずに、先にソースコードへimportを書いてから依存を同期する方法もあります。
import "rsc.io/quote"go mod tidygo mod tidyは、ソースコード内のimport宣言に合わせてgo.modとgo.sumを同期します。不足している依存を追加し、コード内で使われていない依存を削除します。そのため、依存をやめるときはソースコードから対象のimportと利用箇所を削除してgo mod tidyを実行します。
バージョンの指定
依存のバージョンを指定するには、モジュールパスの末尾に@とバージョンを付けます。
go get rsc.io/[email protected]
go get rsc.io/quote@latest@latestを指定すると、公開されている最新のリリースバージョンが選ばれます。リリースがなければv1.2.3-preのようなプレリリース、タグがなければ既定ブランチの最新コミットが選ばれます。
バージョンを省略してgo get rsc.io/quoteを実行した場合も、基本は@latestと同じです。すでに要求しているバージョンの方が新しいときだけ、手元を維持します。
どちらの場合も、go.modには解決された具体的なバージョン番号が記録されます。go.modに手動でlatestと書くことはできず、バージョンの更新はgo getで行います。
メジャーバージョンとimportパス
メジャーバージョンが2以上のモジュールは、パスの末尾に/v2や/v3のようなバージョン接尾辞が付きます。go getの引数だけでなく、コード内のimportパスにもこの接尾辞を含めます。
go get rsc.io/quote/v3@latestimport "rsc.io/quote/v3"
quote.HelloV3()接尾辞の異なるパスは別々のモジュールです。メジャーバージョンが違えば後方互換はなく、パスが分かれているため同一プロジェクト内で同時に使えます。
go installによるバイナリの配置
go installは、mainパッケージをコンパイルし、実行可能バイナリをマシン環境へ配置するためのコマンドです。
自分のプロジェクトで作成したコマンドをビルドして配置する場合は、バージョンを指定せずに実行します。現在のモジュールの依存関係に基づいてビルドされます。
go install .生成された実行ファイルは、GOBIN環境変数が設定されていればそのディレクトリに、未設定であれば$GOPATH/binに配置されます。パスを通しておくことで、ターミナルから直接コマンドを実行できます。
外部のCLIツールをマシンに導入する場合は、パスの末尾に@latestなどのバージョンを指定します。この形式では現在のディレクトリにあるgo.modを読み込まず、指定したバージョンで独立してビルドされます。
go install golang.org/x/tools/cmd/stringer@latest
stringer -help