+incompatibleモジュールバージョンの処理
Goモジュールバージョンの+incompatibleサフィックスを理解します。このサフィックスを持つモジュールが存在する理由と、セマンティックインポートバージョニングに従わなかったモジュール前のGoパッケージの扱い方を学びます。
Workspace
詳細な説明
+incompatibleサフィックス
go.modの一部のモジュールバージョンには+incompatibleサフィックスがあります:
require (
github.com/docker/docker v24.0.7+incompatible
)
意味
+incompatibleサフィックスは、モジュールが:
- gitタグでメジャーバージョンv2以上を持つ
- go.modファイルがない(またはgo.modが/vNサフィックスを使用していない)
- Goモジュールが標準化される前に作成された
なぜ存在するのか
Goモジュール以前(Go 1.11以前)、Goパッケージはインポート互換性ルールに従っていませんでした。Goモジュールが導入された時、これらの既存タグが何らかの形で機能する必要がありました。
+incompatibleモジュールの扱い
- サフィックスを削除できない — モジュール作者のリポジトリによって決定される
go getが自動的に追加する- フォーマッターはサフィックスをそのまま保持する
- 機能的には他の依存関係と同じように動作する
ユースケース
+incompatibleバージョンに遭遇するのは、Docker SDK、特定のデータベースドライバー、その他のモジュール前のGoパッケージを扱う際に一般的です。このサフィックスを理解することで、go.modファイルを読む際の混乱を避けられます。