Perilaku perintah go dan runtime Go dikonfigurasi lewat environment variable: lokasi instalasi, arah unduhan dependensi, target kompilasi, hingga pengaturan garbage collector. Sebagian besar variabel sudah bernilai default yang jarang perlu disentuh, tetapi mengenali daftarnya menyelamatkan kita saat berpindah mesin, membangun untuk platform lain, atau bekerja dengan module privat. Chapter ini merangkum variabel-variabel tersebut dalam dua tabel — konfigurasi perintah go dan pengaturan runtime — berikut nilai defaultnya yang diverifikasi langsung dari keluaran go env pada mesin situs ini.
Melihat Nilai Aktual #
Perintah go env tanpa argumen mencetak seluruh variabel beserta nilainya saat ini:
go envOutput yang Dihasilkan:
AR='ar'
CC='gcc'
CGO_CFLAGS='-O2 -g'
CGO_CPPFLAGS=''
CGO_CXXFLAGS='-O2 -g'
CGO_ENABLED='1'
CGO_FFLAGS='-O2 -g'
CGO_LDFLAGS='-O2 -g'
CXX='g++'
GCCGO='gccgo'
GO111MODULE=''
GOAMD64='v1'
GOARCH='amd64'
GOAUTH='netrc'
GOBIN='/home/z/go/bin'
GOCACHE='/home/z/.cache/go-build'
GOCACHEPROG=''
GODEBUG=''
GOENV='/home/z/.config/go/env'
GOEXE=''
GOEXPERIMENT=''
GOFIPS140='off'
GOFLAGS=''
GOGCCFLAGS='-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -ffile-prefix-map=/tmp/go-build42723945=/tmp/go-build -gno-record-gcc-switches'
GOHOSTARCH='amd64'
GOHOSTOS='linux'
GOINSECURE=''
GOMOD='/home/z/my-project/go.mod'
GOMODCACHE='/home/z/go/pkg/mod'
GONOPROXY=''
GONOSUMDB=''
GOOS='linux'
GOPACKAGESDRIVER=''
GOPATH='/home/z/go'
GOPRIVATE=''
GOPROXY='https://proxy.golang.org,direct'
GOROOT='/home/z/tools/go'
GOSUMDB='sum.golang.org'
GOTELEMETRY='local'
GOTELEMETRYDIR='/home/z/.config/go/telemetry'
GOTMPDIR=''
GOTOOLCHAIN='auto'
GOTOOLDIR='/home/z/tools/go/pkg/tool/linux_amd64'
GOVCS=''
GOVERSION='go1.27.2'
GOWORK=''
PKG_CONFIG='pkg-config'Keluaran di atas diambil dari instalasi Go 1.27.2 milik mesin situs, sehingga nilai berpath seperti GOPATH mengikuti direktori pengguna lokal. Untuk satu variabel saja, jalankan go env GOPATH; untuk menyimpan perubahan permanen, gunakan go env -w GOPROXY=... yang menulis ke berkas konfigurasi pengguna (variabel GOENV menunjukkan lokasinya).
Urutan prioritas nilainya juga perlu dipahami supaya konfigurasi tidak tampak “bandel”: nilai yang di-export di shell selalu menimpa isi berkas go env -w, yang pada gilirannya menimpa default bawaan. Perilaku ini berguna saat CI perlu menyetel GOFLAGS untuk satu pekerjaan tanpa mengubah konfigurasi developer. Variabel target kompilasi GOOS dan GOARCH dapat pula ditetapkan sekali jalan di depan perintah, misalnya GOOS=windows GOARCH=amd64 go build, tanpa mengubah lingkungan shell secara permanen.
Variabel Konfigurasi Perintah go #
| Variabel | Kegunaan | Nilai default | Catatan |
|---|---|---|---|
GOROOT | Lokasi instalasi Go | Ditentukan letak binary go (mesin ini /home/z/tools/go) | Hampir tak pernah diatur manual pada instalasi modern |
GOPATH | Direktori kerja: cache module dan binary | ~/go | Di mode module, peran utamanya tempat GOMODCACHE dan GOBIN |
GOBIN | Tujuan pemasangan binary go install | $GOPATH/bin | Sertakan dalam PATH agar binary mudah dipanggil |
GOCACHE | Cache hasil build dan test | ~/.cache/go-build | go clean -cache mengosongkannya |
GOMODCACHE | Cache unduhan module | $GOPATH/pkg/mod | go clean -modcache mengosongkannya |
GOPROXY | Server proxy unduhan module | https://proxy.golang.org,direct | Koma berarti fallback; direct mengambil langsung dari VCS |
GOSUMDB | Database checksum untuk verifikasi dependensi | sum.golang.org | Menjamin unduhan tidak dirusak pihak ketiga |
GOPRIVATE | Pola path module privat | kosong | Menonaktifkan proxy dan verifikasi bagi path yang cocok |
GOTOOLCHAIN | Strategi pemilihan toolchain | auto | auto, local, atau versi spesifik seperti go1.27.2 |
GOOS | Sistem operasi target kompilasi | Sesuai host (linux) | Kombinasi utama cross-compilation |
GOARCH | Arsitektur target kompilasi | Sesuai host (amd64) | GOOS=windows GOARCH=amd64 menghasilkan .exe |
CGO_ENABLED | Mengaktifkan cgo (interop C) | 1 di host dengan kompiler C | Setel 0 untuk binary statis murni Go |
GOFLAGS | Flag bawaan untuk semua perintah go | kosong | Contoh: -mod=vendor agar selalu pakai direktori vendor |
GODEBUG | Menyetel fitur runtime debug | kosong | Format kunci=nilai dipisah koma |
GOEXPERIMENT | Mengaktifkan fitur eksperimental | kosong | Tidak untuk produksi; bisa berubah antar rilis |
Variabel Runtime #
Kelompok kedua tidak muncul dalam go env karena dibaca langsung oleh runtime saat program berjalan, bukan oleh perintah go. Ketiganya dibahas mendalam pada chapter GC Tuning
.
| Variabel | Kegunaan | Nilai default |
|---|---|---|
GOMAXPROCS | Jumlah thread OS yang menjalankan kode Go secara paralel | Jumlah CPU host (mesin ini 2) |
GOGC | Target persentase memori yang memicu siklus garbage collector | 100 |
GOMEMLIMIT | Batas lunak total memori runtime | Tidak diset (off) |
GOMEMLIMIT menetapkan batas lunak: garbage collector bekerja lebih agresif mendekati batas, tetapi program tetap boleh melampauinya ketimbang langsung gagal alokasi. Nilai GOGC=off mematikan GC sama sekali — praktik yang hanya masuk akal untuk program berumur sangat pendek.
Referensi #
- Dokumentasi perintah go — rujukan resmi variabel lingkungan beserta efeknya.
- Go Modules Reference
— peran
GOPROXY,GOSUMDB, danGOPRIVATEdalam unduhan module.
Ketika konfigurasi sudah benar tetapi kode tetap ditolak, musuh berikutnya adalah compiler: kamus pesan errornya yang paling sering muncul dirangkum pada chapter Compiler Error .