Memasang Go & program pertama
Pemasangan Go sengaja membosankan: satu arsip, satu folder, satu variabel PATH. Yang menarik justru apa yang kamu dapat setelahnya — compiler, formatter, test runner, dan dependency manager dalam satu perintah.
Intisari
- Versi acuan roadmap ini Go 1.26 (rilis Februari 2026). Rilis mayor turun tiap Februari dan Agustus.
- Pasang dengan menghapus
/usr/local/golalu mengekstrak arsip baru — jangan menimpa folder lama. go runmengompilasi ke folder sementara lalu menjalankan;go buildmeninggalkan binari yang bisa kamu kirim.- Hasil
go buildadalah satu berkas statis tanpa runtime terpisah — inilah alasan image Docker Go bisa berukuran belasan megabita. - Tidak ada
nvmataupyenvdi Go: toolchain bisa berpindah versi sendiri lewat barisgodigo.mod.
Pasang
# Linux — hapus dulu, baru ekstrak. Menimpa folder lama adalah penyebab
# error "cannot find package" yang paling membingungkan.
rm -rf /usr/local/go
curl -fsSLO https://go.dev/dl/go1.26.5.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.26.5.linux-amd64.tar.gz
# tambahkan ke ~/.bashrc atau ~/.zshrc
export PATH=$PATH:/usr/local/go/bin
go version
# go version go1.26.5 linux/amd64
macOS dan Windows punya installer grafis di halaman yang sama. Di macOS, brew install go juga
bekerja — tapi begitu kamu punya beberapa proyek dengan versi berbeda, mekanisme toolchain bawaan Go
(dibahas di bawah) lebih dapat diandalkan daripada manajer paket sistem.
Program pertama
mkdir halo && cd halo
go mod init contoh.com/halo
// main.go
package main
import "fmt"
func main() {
fmt.Println("Halo, Go")
}
go run . # kompilasi ke folder sementara, jalankan, buang
go build -o halo # tinggalkan binari bernama "halo"
./halo
| Yang mungkin asing | Artinya |
|---|---|
package main | Paket bernama main adalah satu-satunya yang bisa jadi program. Paket lain jadi pustaka. |
func main() | Titik masuk. Tidak menerima argumen dan tidak mengembalikan apa pun — argumen dibaca dari os.Args. |
| Tidak ada titik koma | Compiler menyisipkannya sendiri di akhir baris. Karena itu { wajib di baris yang sama. |
| Indentasi tab | gofmt memakai tab, dan tidak bisa diatur. Ini bukan preferensi, ini keputusan yang sudah diambil untukmu. |
contoh.com/halo | Nama modul. Berfungsi sebagai awalan import; tidak harus domain yang benar-benar kamu miliki, tapi sebaiknya begitu. |
Satu binari, tanpa runtime
Ini sifat Go yang paling menentukan sisa roadmap ini. Hasil go build sudah berisi seluruh
dependensi dan runtime Go. Tidak ada interpreter yang harus dipasang di server, tidak ada
vendor/ yang harus disalin, tidak ada versi bahasa yang harus cocok di produksi.
# binari untuk Linux, dibangun dari macOS — tanpa Docker, tanpa toolchain silang
GOOS=linux GOARCH=arm64 go build -o server-linux ./cmd/server
ls -lh server-linux
# -rwxr-xr-x 1 nurhadi staff 12M server-linux
Kenapa ini penting sejak halaman pertama: di Fase 10 kita membangun image Docker berbasis
scratch yang isinya cuma satu berkas ini. Ukuran image turun dari ratusan megabita jadi
belasan, waktu cold start ECS turun, dan permukaan serangan container berkurang drastis karena
di dalamnya benar-benar tidak ada shell.
Versi dan toolchain
Go tidak butuh nvm. Baris go di go.mod menyatakan versi bahasa
minimum, dan sejak Go 1.21 toolchain akan mengunduh dan memakai versi yang tepat sendiri
kalau versimu terlalu tua:
module contoh.com/toko
go 1.25.0 // versi bahasa minimum yang dibutuhkan modul ini
toolchain go1.26.5 // versi toolchain yang dipakai kalau versimu lebih tua
Kejutan kecil di Go 1.26: go mod init sekarang menulis versi satu rilis di
bawah toolchain-mu (Go 1.26 menulis go 1.25.0). Ini disengaja — supaya modul baru tetap
bisa dipakai orang yang belum sempat naik versi. Naikkan sendiri dengan
go mod edit -go=1.26.0 kalau kamu butuh fitur bahasa terbaru.
Kebijakan dukungan versi
| Versi | Rilis | Dukungan keamanan berakhir |
|---|---|---|
| 1.24 | Feb 2025 | saat 1.26 rilis (Feb 2026) |
| 1.25 | Agu 2025 | saat 1.27 rilis (Agu 2026) |
| 1.26 | Feb 2026 | saat 1.28 rilis (Feb 2027) |
Aturannya satu kalimat: sebuah rilis didukung sampai ada dua rilis mayor yang lebih baru. Artinya kamu punya waktu sekitar satu tahun per versi — jauh lebih longgar daripada yang dikira orang, tapi tetap berarti upgrade tahunan adalah pekerjaan rutin, bukan proyek. Dibahas lagi di Fase 11.
Variabel lingkungan yang perlu kamu tahu
go env GOPATH # tempat modul yang diunduh disimpan (~/go)
go env GOMODCACHE # cache modul — aman dihapus, akan diunduh ulang
go env GOBIN # tempat "go install" menaruh binari
# ubah secara permanen, tanpa menyentuh shell profile
go env -w GOBIN=$HOME/.local/bin
Yang tidak perlu kamu urus lagi: GOPATH sebagai tempat menaruh kode.
Sebelum Go 1.11, semua proyek wajib tinggal di dalam $GOPATH/src. Itu sudah lama tidak
berlaku — proyekmu boleh di mana saja, asal ada go.mod. Kalau sebuah tutorial menyuruhmu
memindahkan folder ke $GOPATH, tutorial itu ditulis sebelum 2018.
Latihan: pasang Go, buat modul contoh.com/halo, dan jalankan go run ..
Lalu jalankan GOOS=linux GOARCH=amd64 go build -o halo-linux dari laptopmu dan buktikan dengan
file halo-linux bahwa yang dihasilkan memang binari Linux — meski kamu tidak memasang apa pun
yang berbau Linux.
Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.