Go/go.work
表示
< Go
go.work は、Go 1.18 で追加された ワークスペースモード の設定ファイルです。
簡単に言うと、複数の go.mod(モジュール)を 1 つの開発単位としてまとめるための仕組みです。
目的
[編集]- 大規模プロジェクトやモノレポ(monorepo)のように、複数の Go モジュールを同時に開発するとき、
- 依存モジュールを ローカルの修正版 に差し替える
replaceをたくさん書くという手間を減らすために導入されました。
基本構造
[編集]- 例
go 1.22 use ( ./app ./lib )
go- ワークスペースで使う Go のバージョン。
use- 各モジュールのパス(相対パス or 絶対パス)を指定。
- ここで指定したパスのディレクトリには それぞれ
go.modがある必要 があります。
動作イメージ
[編集]go.work があると、Go ツールチェーンは
「モジュールの依存解決時に、go.work の use で指定されたローカルモジュールを優先する」 ようになります。
- 例
# 構成 /go.work /app/go.mod ← module example.com/app /lib/go.mod ← module example.com/lib
もし /app/go.mod が require example.com/lib v1.0.0 を指定していても、
ワークスペースモードでは ./lib が優先され、ローカルの最新版が使われます。
利点
[編集]replaceを大量に書かなくてもローカル開発できる。- モジュールごとの独立性は維持しつつ、一括でビルド・テストできる。
go test ./...で全モジュールを一気にテスト可能。
主なコマンド
[編集]- 作成
go work init ./app ./lib
- →
go.workが生成される。 - モジュール追加
go work use ./newmodule
- モジュール削除
go work edit -dropuse ./lib
注意点
[編集]go.workは 開発用の設定ファイル なので、基本的に配布バイナリや本番ビルドには不要。- Go 1.18 以降でのみ有効。
go.work.sumという依存のハッシュファイルも生成されます(go.sumと同じ役割のワークスペース版)。