Goモジュールパスのメジャーバージョンサフィックス
インポートパスのGoメジャーバージョンサフィックス規約(v2+)を理解します。モジュールパスに/v2、/v3が含まれる理由と、複数のメジャーバージョンの共存方法を学びます。
Dependencies
詳細な説明
メジャーバージョンサフィックス
Goモジュールは独自の規約を強制します:メジャーバージョン2以上のモジュールパスにはバージョンサフィックスを含める必要があります。
ルール
require (
github.com/example/lib v1.5.0 // v0またはv1: サフィックスなし
github.com/example/lib/v2 v2.3.1 // v2: /v2サフィックス必須
github.com/example/lib/v3 v3.0.0 // v3: /v3サフィックス必須
)
なぜこの規約?
Goのインポート互換性ルール:古いパッケージと新しいパッケージが同じインポートパスを持つ場合、新しいパッケージは古いパッケージとの後方互換性を持たなければならない。メジャーバージョンバンプは破壊的変更を示すため、異なるインポートパスが必要です。
メジャーバージョンの共存
この設計により、同じバイナリ内で異なるメジャーバージョンが共存できます。
一般的なミス
フォーマッターは重要なエラーを検出します:パスサフィックスとバージョンの不一致。パスが/v3と言っているがバージョンがv2.xの場合、go mod tidyの検証に失敗します。
ユースケース
メジャーバージョンサフィックスは、ライブラリを新しいメジャーバージョンに移行する際に重要です。人気のある依存関係がAPIの破壊的変更を含むv2をリリースした場合、チームはコード内のインポートパスとgo.modのモジュールパスの両方を更新する必要があります。