go.modのExcludeディレクティブ
go.modのexcludeディレクティブを使用して特定のモジュールバージョンの使用を防ぐ方法を学びます。バージョンを除外するタイミングと依存関係解決への影響を理解します。
Directives
詳細な説明
Excludeディレクティブ
excludeディレクティブはモジュールの特定バージョンがビルドで使用されることを防ぎます。Goの依存関係リゾルバーは除外されたバージョンをスキップし、代わりに次の利用可能なバージョンを選択します。
構文
exclude github.com/example/lib v1.2.3
Excludeの動作
依存関係解決中に除外されたバージョンに遭遇した場合:
- その特定バージョンを完全にスキップ
- 除外されていない次のより高いバージョンを選択
- より高いバージョンが存在しない場合、ビルドが失敗
Exclude vs Replace
| 機能 | exclude | replace |
|---|---|---|
| 目的 | バージョンをスキップ | 別のソースにリダイレクト |
| 効果 | 次の利用可能なバージョンを使用 | 指定された置換を使用 |
制限事項
- メインモジュールでのみ適用
- バージョン範囲を除外できない — 各バージョンを個別にリストする必要がある
- 実際にはあまり使用されない —
replaceとretractがほとんどのケースをカバー
ユースケース
Excludeディレクティブは、推移的依存関係に既知の不良バージョンがあり、それを引き込む直接依存関係を簡単にアップグレードできない場合に便利です。セキュリティチームは脆弱なバージョンを即座にブロックするためにexcludeを使用します。