v2以上にアップデートするにはコツがいる
golang でライブラリを作ったとき、破壊的変更をしてメジャーバージョンをアップデートするには少しコツが必要です。
サンプルの構成は以下の通りです。
/hello
├── go.mod
└── hello.go
go.mod
module github.com/example/hello
go 1.14
hello.go
package hello
func Hello() string {
return "hello"
}
vX.0.0 を作る
機能に破壊的変更を加え、コミット、プッシュします。
このコミットに対して vX.0.0
タグ(X には任意のバージョンが入る) をつけてください。
この時点では他リポジトリから利用できません
hello.go
package hello
func HelloV2() string {
return "hello v2"
}
vX.0.1 を作る
go.mod
のモジュール名を修正します。
go.mod
module github.com/example/hello/vX
go 1.14
go get github.com/example/hello/vX
で利用可能になります。
まとめ
- メジャーバージョンを上げるときは一旦
vX.0.0
というバージョンを作ってから モジュール名を変更する必要があります。-
vX.0.0
でいきなりモジュール名も変更してしまうと go get できません。 -
vX.0.1
を作った後もvX.0.0
は利用不可能なバージョンとして残ります。
-
- ちょっと変な感じ。。。
- もっといい方法があれば教えてほしいです。