โ† Semua pembelajaran / Go Nol โ†’ Enterprise
Fase 0 ยท Fondasi Go & Tooling

Perkakas bawaan: fmt, vet, test, fix

Sebagian besar perdebatan perkakas di bahasa lain tidak pernah terjadi di Go, karena jawabannya sudah ikut di dalam toolchain. Materi ini tentang perintah mana yang dipakai kapan.

Sumber asli pkg.go.dev Resmi Rangkuman ~6 menit baca

Intisari

  • gofmt tidak punya opsi. Format kode berhenti jadi bahan review di seluruh ekosistem Go.
  • go vet menangkap kesalahan yang kompilasi tapi salah โ€” format Printf keliru, lock disalin, defer di dalam loop.
  • go test ./... menjalankan semua tes; -race menyalakan detektor data race dan wajib di CI.
  • Go 1.26 menjadikan go fix sebagai pemodernisasi kode: puluhan perbaikan otomatis ke idiom dan API terbaru.
  • go build ./... hanya memeriksa; artefak yang mau kamu kirim keluar dari go build -o.

Perintah yang dipakai tiap hari

go run ./cmd/server        # kompilasi + jalankan, tanpa meninggalkan binari
go build ./...             # kompilasi semua paket, buang hasilnya (cek cepat)
go test ./...              # semua tes di semua paket
go test -race ./...        # + detektor data race
go vet ./...               # analisis statis bawaan
gofmt -l .                 # daftar berkas yang formatnya belum benar
go fix ./...               # modernisasi kode ke idiom terbaru (Go 1.26)
go doc net/http.Handler    # dokumentasi, tanpa membuka browser

gofmt: perdebatan yang sudah selesai

gofmt -l .        # cuma tampilkan nama berkas yang belum terformat
gofmt -w .        # tulis ulang di tempat
gofmt -d main.go  # tampilkan diff-nya

gofmt tidak punya opsi konfigurasi โ€” tidak ada pilihan tab versus spasi, tidak ada panjang baris maksimum, tidak ada gaya kurung. Akibatnya seluruh kode Go di dunia terlihat sama, dan tidak ada satu pun komentar review tentang format. Untuk tim, ini penghematan yang jauh lebih besar daripada kelihatannya.

# varian resmi yang juga merapikan urutan import
go install golang.org/x/tools/cmd/goimports@latest
goimports -w .

Pasang format on save di editormu sekarang, bukan nanti. Semua editor besar sudah mendukungnya lewat gopls (bahasa server resmi Go). Setelah itu kamu tidak akan pernah memikirkan format lagi seumur memakai Go.

go vet: kesalahan yang lolos compiler

Yang ditangkapContoh
Format Printf tidak cocokfmt.Printf("%d", "teks")
Struct berisi mutex disalinMeneruskan sync.Mutex secara nilai โ€” lock jadi tidak berfungsi
Hasil yang harus dipakai tapi dibuangerrors.New("x") tanpa disimpan
Struct tag salah tulisjson:"nama,omitempy" (huruf t hilang)
Perbandingan yang selalu benar/salahMembandingkan error dengan == pada tipe yang dibungkus
Lambda yang menahan variabel loopSudah jauh berkurang sejak Go 1.22, tapi masih relevan di kode lama

go vet otomatis dijalankan oleh go test untuk sebagian pemeriksaan. Artinya sebagian kesalahan ini sudah menghentikan suite tesmu tanpa kamu mengatur apa pun.

go fix: pemodernisasi kode (Go 1.26)

Di Go 1.26 perintah go fix ditulis ulang total. Dulu ia cuma menerjemahkan API pra-Go-1; sekarang ia berisi puluhan modernizer yang menulis ulang kode lama jadi idiom terbaru โ€” dan dibangun di atas kerangka analisis yang sama dengan go vet.

go fix ./...          # terapkan
go fix -diff ./...    # lihat dulu apa yang akan diubah
Kode lamaDiubah jadi
for i := 0; i < n; i++ tanpa memakai ifor range n
interface{}any
sort.Slice(...)slices.SortFunc(...)
Perulangan manual mencari elemenslices.Contains
if v, ok := m[k]; !ok { m[k] = ... }Bentuk yang lebih ringkas dari maps

Perubahannya dijanjikan tidak mengubah perilaku program โ€” tapi tetap jalankan tes setelahnya dan baca diff-nya. go fix paling berguna dijalankan sekali setiap naik versi Go, dan hasilnya di-commit terpisah dari perubahan fungsional supaya review-nya mudah.

Cache build dan tes

go test ./...        # kedua kalinya: "(cached)" โ€” tes tidak dijalankan ulang
go test -count=1 ./...   # paksa jalan ulang, abaikan cache
go clean -cache          # buang cache build
go clean -testcache      # buang cache hasil tes

Go menyimpan hasil kompilasi dan hasil tes yang inputnya tidak berubah. Ini yang membuat go test ./... di repo besar sering selesai dalam hitungan detik. Di CI, menyimpan $(go env GOCACHE) dan $(go env GOMODCACHE) antar-jalan biasanya memangkas separuh durasi pipeline โ€” dipakai lagi di Fase 10.

Memasang perkakas pihak ketiga

# cara lama: mengotori PATH global, versinya tidak tercatat di mana pun
go install github.com/x/alat@latest

Sejak Go 1.24 ada cara yang jauh lebih baik: direktif tool di go.mod. Versi perkakas ikut tercatat di modul, jadi seluruh tim dan CI memakai versi yang sama:

go get -tool github.com/sqlc-dev/sqlc/cmd/sqlc
go tool sqlc generate
// go.mod
tool (
	github.com/sqlc-dev/sqlc/cmd/sqlc
	golang.org/x/tools/cmd/goimports
)

Latihan: tulis fmt.Printf("%d\n", "halo") di proyekmu. Perhatikan bahwa go build berhasil, lalu jalankan go vet ./... dan baca yang dilaporkannya. Setelah itu rusak formatnya (hapus semua indentasi), jalankan gofmt -d ., lalu gofmt -w ..

Rangkuman ini sengaja dipangkas ke bagian yang dipakai di roadmap. Buka sumber aslinya saat kamu butuh detail lengkap atau referensi parameter.