← Semua pembelajaran / Go Nol → Enterprise
Fase 0 · Fondasi Go & Tooling

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.

Sumber asli go.dev Resmi Rangkuman ~5 menit baca

Intisari

  • Versi acuan roadmap ini Go 1.26 (rilis Februari 2026). Rilis mayor turun tiap Februari dan Agustus.
  • Pasang dengan menghapus /usr/local/go lalu mengekstrak arsip baru — jangan menimpa folder lama.
  • go run mengompilasi ke folder sementara lalu menjalankan; go build meninggalkan binari yang bisa kamu kirim.
  • Hasil go build adalah satu berkas statis tanpa runtime terpisah — inilah alasan image Docker Go bisa berukuran belasan megabita.
  • Tidak ada nvm atau pyenv di Go: toolchain bisa berpindah versi sendiri lewat baris go di go.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 asingArtinya
package mainPaket 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 komaCompiler menyisipkannya sendiri di akhir baris. Karena itu { wajib di baris yang sama.
Indentasi tabgofmt memakai tab, dan tidak bisa diatur. Ini bukan preferensi, ini keputusan yang sudah diambil untukmu.
contoh.com/haloNama 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

VersiRilisDukungan keamanan berakhir
1.24Feb 2025saat 1.26 rilis (Feb 2026)
1.25Agu 2025saat 1.27 rilis (Agu 2026)
1.26Feb 2026saat 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.