Instalasi Go yang berhasil di chapter sebelumnya membawa tiga variabel lingkungan yang mengatur lokasi kerja peralatan Go: GOROOT, GOPATH, dan GOMODCACHE. Pada era module yang menjadi standar sejak Go 1.16, ketiga variabel tersebut sudah memiliki nilai bawaan yang benar sehingga kita jarang perlu mengaturnya secara manual. Meskipun begitu, memahami peran masing-masing variabel membuat kita tidak kehilangan arah ketika membaca dokumentasi lama, memeriksa lokasi berkas, atau memecahkan masalah konfigurasi. Pada chapter ini kita akan membedah ketiganya satu per satu, termasuk cara melihat nilai aktualnya di komputer kita sendiri.
Tiga Variabel dan Perannya #
Tabel berikut merangkum peran setiap variabel beserta nilai bawaannya di Linux dan macOS:
| Variabel | Peran | Nilai bawaan (Linux/macOS) | Perlu diatur manual? |
|---|---|---|---|
GOROOT | lokasi instalasi Go: compiler, perintah go, dan standard library | terdeteksi otomatis dari lokasi berkas go | hampir tidak pernah |
GOPATH | direktori kerja pribadi: berkas biner hasil go install dan cache modul | ~/go | opsional |
GOMODCACHE | lokasi penyimpanan seluruh modul yang pernah diunduh | ~/go/pkg/mod | opsional |
Perintah go env dengan nama variabel sebagai argumen akan mencetak nilai efektif variabel tersebut di komputer kita. Berikut hasil eksekusi pada lingkungan penulisan materi ini, tempat Go terpasang di /home/z/tools/go:
go env GOROOT GOPATH GOMODCACHEOutput yang Dihasilkan:
/home/z/tools/go
/home/z/go
/home/z/go/pkg/modPada komputer dengan instalasi standar, baris pertama biasanya berisi /usr/local/go; dua baris terakhir mengikuti direktori home pengguna. Hal terpenting: baris pertama harus menunjuk ke instalasi Go yang benar.
GOROOT: Lokasi Instalasi yang Terdeteksi Otomatis #
GOROOT menyimpan lokasi berkas-berkas instalasi Go: compiler, perintah go, dan seluruh source code standard library. Sejak lama, program go mampu mendeteksi lokasi instalasinya sendiri dari jalur tempat berkas go dijalankan, sehingga variabel GOROOT tidak perlu dideklarasikan di berkas konfigurasi shell.
GOPATH: Direktori Kerja Pribadi #
GOPATH adalah direktori kerja milik pengguna, dengan nilai bawaan ~/go di Linux dan macOS serta %USERPROFILE%\go di Windows. Dua subdirektori di dalamnya yang masih aktif dipakai hingga sekarang adalah bin untuk menampung berkas biner hasil perintah go install, dan pkg/mod untuk menampung cache modul. Subdirektori ketiga bernama src hanya relevan pada alur kerja GOPATH mode yang lama, ketika seluruh source code program wajib diletakkan di dalam $GOPATH/src.
Pada lingkungan penulisan materi ini, direktori ~/go masih dalam kondisi baru karena belum ada perintah go install yang dijalankan:
ls "$(go env GOPATH)"Output yang Dihasilkan:
pkgKeluaran satu baris tersebut menunjukkan bahwa hanya pkg yang ada, sementara bin baru akan dibuat otomatis pada go install pertama kita (misalnya saat memasang gopls pada chapter Instalasi gopls
). Subdirektori src tidak dibuat sama sekali karena alur kerja modern tidak lagi membutuhkannya.
Mengubah Nilai dengan go env -w #
Perintah go env -w menyimpan perubahan nilai ke sebuah berkas khusus milik pengguna, biasanya ~/.config/go/env di Linux, sehingga nilainya bertahan melewati sesi terminal. Berikut demo nyata yang mengubah GOPATH, memeriksa hasilnya, lalu mengembalikan keadaan semula dengan go env -u:
go env -w GOPATH=/tmp/go-projects
go env GOPATH
go env -u GOPATH
go env GOPATHOutput yang Dihasilkan:
/tmp/go-projects
/home/z/goDua baris keluaran tersebut masing-masing berasal dari perintah go env GOPATH pertama dan kedua: setelah -w, nilai berubah menjadi /tmp/go-projects, dan setelah -u, nilai kembali ke bawaan /home/z/go. Perintah go env -w dan go env -u sendiri tidak mencetak apa pun ketika berhasil.
GOMODCACHE: Lokasi Cache Modul #
GOMODCACHE menyimpan seluruh modul pihak ketiga yang pernah diunduh oleh go get atau go mod tidy. Nilai bawaannya adalah $GOPATH/pkg/mod, dan ukurannya membesar seiring banyaknya proyek yang kita kembangkan — hal yang wajar dan menguntungkan, karena setiap modul cukup diunduh sekali lalu dipakai ulang oleh semua proyek. Ketika ruang disk menipis, perintah go clean -modcache menghapus seluruh isi cache tersebut dengan aman; modul akan diunduh ulang otomatis saat dibutuhkan.
Dengan tiga variabel ini dipahami, langkah berikutnya adalah melihat bagaimana ketiganya bekerja dalam struktur proyek modern berbasis module, yang akan kita bedah pada chapter Memahami Go Workspace .
Referensi #
- Organizing a Go module
— struktur direktori kerja Go modern dan peran
GOPATH. - Command go
— dokumentasi resmi perintah
go env -wdango env -u. - Installing Go — langkah instalasi yang menjadi dasar konfigurasi variabel ini.