1リポジトリに複数go.modがある場合どうやって各モジュールに異なるバージョンを付与するか
[追記]
公式ドキュメントに解説が書いてあったので英語読める人はこちらを読んでください。
前置き
1つのGitHubのリポジトリにgo.modが1つある場合、そのモジュールのバージョン = gitのタグになる。
gitのタグでv1.0.0
というタグをつければ、モジュールのバージョンもv1.0.0
になる。
go-libというリポジトリであれば、下記コマンドでバージョンを指定してモジュールを取得できる。
go get github.com/takurooo/go-lib@v1.0.0
では複数のgo.modが1つのリポジトリにある場合はどうすればいいのか。
やり方
gitのタグ名にモジュールのパスも付ければOK。
以下のようなディレクトリ構造のgo-multi-versionというリポジトリがあったとする。
. ├── module1 │ ├── go.mod │ └── module1.go └── module2 ├── go.mod └── module2.go
module1にv0.0.1を付けたい場合はタグ名をmodule1/v0.0.1
にする。
module2にv1.0.0を付けたい場合はタグ名をmodule2/v1.0.0
にする。
タグ名にモジュールまでのパスを含めることで各モジュールごとにバージョンを付与することができる。
go getするときは以下のように実行する。
go get github.com/takurooo/go-multi-version/module1@v0.0.1 go get github.com/takurooo/go-multi-version/module2@v1.0.0
以下のようにバージョン指定するとエラーになる。
go get github.com/takurooo/go-multi-version/module1@v1.0.0 go get github.com/takurooo/go-multi-version/module2@v0.0.1
ちなみにAWS SDKは1つのリポジトリに複数のgo.modを持っている。