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:

bash
go env

Output yang Dihasilkan:

text
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 #

VariabelKegunaanNilai defaultCatatan
GOROOTLokasi instalasi GoDitentukan letak binary go (mesin ini /home/z/tools/go)Hampir tak pernah diatur manual pada instalasi modern
GOPATHDirektori kerja: cache module dan binary~/goDi mode module, peran utamanya tempat GOMODCACHE dan GOBIN
GOBINTujuan pemasangan binary go install$GOPATH/binSertakan dalam PATH agar binary mudah dipanggil
GOCACHECache hasil build dan test~/.cache/go-buildgo clean -cache mengosongkannya
GOMODCACHECache unduhan module$GOPATH/pkg/modgo clean -modcache mengosongkannya
GOPROXYServer proxy unduhan modulehttps://proxy.golang.org,directKoma berarti fallback; direct mengambil langsung dari VCS
GOSUMDBDatabase checksum untuk verifikasi dependensisum.golang.orgMenjamin unduhan tidak dirusak pihak ketiga
GOPRIVATEPola path module privatkosongMenonaktifkan proxy dan verifikasi bagi path yang cocok
GOTOOLCHAINStrategi pemilihan toolchainautoauto, local, atau versi spesifik seperti go1.27.2
GOOSSistem operasi target kompilasiSesuai host (linux)Kombinasi utama cross-compilation
GOARCHArsitektur target kompilasiSesuai host (amd64)GOOS=windows GOARCH=amd64 menghasilkan .exe
CGO_ENABLEDMengaktifkan cgo (interop C)1 di host dengan kompiler CSetel 0 untuk binary statis murni Go
GOFLAGSFlag bawaan untuk semua perintah gokosongContoh: -mod=vendor agar selalu pakai direktori vendor
GODEBUGMenyetel fitur runtime debugkosongFormat kunci=nilai dipisah koma
GOEXPERIMENTMengaktifkan fitur eksperimentalkosongTidak 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 .

VariabelKegunaanNilai default
GOMAXPROCSJumlah thread OS yang menjalankan kode Go secara paralelJumlah CPU host (mesin ini 2)
GOGCTarget persentase memori yang memicu siklus garbage collector100
GOMEMLIMITBatas lunak total memori runtimeTidak 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 #

Ketika konfigurasi sudah benar tetapi kode tetap ditolak, musuh berikutnya adalah compiler: kamus pesan errornya yang paling sering muncul dirangkum pada chapter Compiler Error .