Go Workspace dan Multi Module
Definisi
go.work (Go 1.18+) mengelola multi-module dalam satu workspace tanpa merusak go.mod masing-masing. Cocok untuk monorepo: beberapa module (api, lib, cli) berkembang bersama tapi tiap punya versi sendiri. replace di go.mod menunjuk dependensi ke path lokal saat dev.
Kapan dipakai
Pakai go.work saat mengembangkan beberapa module sekaligus (library + aplikasi yang menggunakannya) tanpa publish ke registry. Untuk dependensi eksternal biasa, cukup go.mod + require.
Cara kerja
go.work
go work init ./api ./lib ./cli
# hasil: go.work berisi use ./api ./lib ./cliSekarang api bisa import "example.com/lib" dan Go mencari di folder lokal ./lib, bukan proxy.
replace (di go.mod)
// di api/go.mod
require example.com/lib v0.0.0
replace example.com/lib => ../libStruktur alur
Loading diagram...
Catatan implementasi
go.worktidak perlu di-commit ke produksi build; ia untuk dev lokal. CI biasanya build per-module.replacedigo.modcocok untuk fork/debug; hapus sebelum rilis resmi.- Tiap module tetap punya
go.modsendiri —go.workcuma koordinator. go work use ./newmodmenambah module ke workspace.
Kesalahan umum
- Commit go.work ke release: sebaiknya gitignore di produksi; ganggu build CI.
- Lupa replace saat tanpa workspace: module tak temukan lokal, error proxy.
- Veri module beda GOPATH lama: Go 1.18+ sudah module-mode default.
- Edit lib tak kebaca: pastikan module terdaftar di
go.work use.