Go Modules
Definisi
Go Modules menggunakan semantic import versioning: untuk major version ≥ 2, import path harus menyertakan /v2, /v3, dst (github.com/x/lib/v3). replace directive di go.mod memetakan modul ke path/versi lain (lokal atau fork) tanpa mengubah kode impor.
Kapan dipakai
Pakai /vN saat rilis major version yang breaking. Pakai replace saat debug modul lokal, fork patch, atau vendor sementara. Jangan pakai replace permanen di library publik (pemakai tak bisa override).
Cara kerja
Major version path
import "github.com/foo/lib/v3" // wajib /v3 untuk v3+replace lokal
// go.mod
require github.com/foo/lib v1.2.3
replace github.com/foo/lib => ../lib-localpublish major
git tag v3.0.0
go mod tidyStruktur alur
Loading diagram...
Catanya implementasi
/vNhanya untuk major; minor/patch tidak butuh suffix.replacedengan=> ../lokalhanya untuk dev; jangan commit ke modul yang didistribusikan (atau hapus sebelum release).go mod tidymembersihkan require yang tak terpakai.- Untuk multi-module,
go.worklebih tepat daripadareplace(lihat file 176).
Kesalahan umum
- Lupa /vN di import: compiling tapi pakai v1; major v2+ wajib suffix.
- Commit replace lokal: break build orang lain; hapus sebelum tag.
- Major tanpa tag:
v2.0.0harus ada tag git. - replace bentrok workspace: pakai
go.workbila multi-modul.