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.
Intisari
gofmttidak punya opsi. Format kode berhenti jadi bahan review di seluruh ekosistem Go.go vetmenangkap kesalahan yang kompilasi tapi salah โ formatPrintfkeliru, lock disalin,deferdi dalam loop.go test ./...menjalankan semua tes;-racemenyalakan detektor data race dan wajib di CI.- Go 1.26 menjadikan
go fixsebagai pemodernisasi kode: puluhan perbaikan otomatis ke idiom dan API terbaru. go build ./...hanya memeriksa; artefak yang mau kamu kirim keluar darigo 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 ditangkap | Contoh |
|---|---|
Format Printf tidak cocok | fmt.Printf("%d", "teks") |
| Struct berisi mutex disalin | Meneruskan sync.Mutex secara nilai โ lock jadi tidak berfungsi |
| Hasil yang harus dipakai tapi dibuang | errors.New("x") tanpa disimpan |
| Struct tag salah tulis | json:"nama,omitempy" (huruf t hilang) |
| Perbandingan yang selalu benar/salah | Membandingkan error dengan == pada tipe yang dibungkus |
| Lambda yang menahan variabel loop | Sudah 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 lama | Diubah jadi |
|---|---|
for i := 0; i < n; i++ tanpa memakai i | for range n |
interface{} | any |
sort.Slice(...) | slices.SortFunc(...) |
| Perulangan manual mencari elemen | slices.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.