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のモジュールパスの両方を更新する必要があります。

試してみる — go.mod Formatter

フルツールを開く