Goワークスペースとマルチモジュール開発

Goワークスペース(go.workファイル)がreplaceディレクティブなしでマルチモジュール開発を可能にする方法を学びます。go.workとgo.modファイルの関係を理解します。

Workspace

詳細な説明

Goワークスペース

Go 1.18は、マルチモジュール開発のファーストクラスソリューションとしてワークスペースgo.workファイル)を導入しました。

go.workファイル

go 1.22.0

use (
    ./my-service
    ./shared-lib
    ./another-module
)

ワークスペース vs Replaceディレクティブ

機能 go.work go.modのreplace
スコープ ワークスペース全体 単一モジュール
VCSにコミット 通常.gitignored コミット前に削除必須
マルチモジュール ファーストクラスサポート 依存関係ごとに1つのreplace

ワークスペースを使用すべき場合

  • 複数の関連モジュールの同時開発
  • 複数のGoモジュールを持つモノレポ
  • モジュール境界を超えた変更のテスト

ベストプラクティス

  • go.workgo.work.sum.gitignoreに追加する
  • 各モジュールのgo.modは独立して有効であるべき
  • CIは各モジュールを独立してビルドすべき(ワークスペースを使用しない)

ユースケース

Goワークスペースは、共有ライブラリを持つマイクロサービスアーキテクチャに取り組むチームに最適です。replaceディレクティブをやりくりする代わりに、開発者は一度ローカルワークスペースを設定します。go.modフォーマッターは個々のモジュールファイルをクリーンに保ちます。

試してみる — go.mod Formatter

フルツールを開く