Di banyak bahasa pemrograman lama, variabel yang dideklarasikan tanpa nilai awal berisi sampah memori (garbage value) yang isinya tidak terduga. Go menghilangkan seluruh kelas bug ini dengan aturan sederhana: setiap variabel yang dideklarasikan tanpa nilai awal otomatis diisi zero value dari tipenya. Hasilnya selalu deterministik dan dapat diprediksi tanpa membaca dokumentasi tambahan. Pada chapter ini kita akan melihat zero value setiap kelompok tipe, memverifikasi nilainya lewat program nyata, dan memahami kapan zero value justru berguna sebagai titik awal perhitungan.
Aturan Zero Value #
Zero value ditentukan sepenuhnya oleh tipe variabel yang dideklarasikan. Tabel berikut merangkum zero value untuk kelompok tipe yang paling sering dipakai:
| Kelompok tipe | Zero value | Contoh tipe |
|---|---|---|
| Bilangan bulat | 0 | int, int8, uint64 |
| Bilangan desimal | 0 | float32, float64 |
| Boolean | false | bool |
| String | "" (string kosong) | string |
| Referensi | nil | slice, map, pointer, channel, func, interface |
Zero value melekat pada deklarasi var tanpa nilai awal, baik di dalam fungsi maupun di level package. Deklarasi pendek := tidak mengenal zero value karena bentuk tersebut selalu mengisi nilai sekaligus.
Program Utuh #
Berkas zero-value-demo.go mendeklarasikan satu variabel tanpa nilai awal untuk setiap kelompok tipe, lalu mencetak isinya. Jalankan berkas tersebut dari direktori chapter:
go run zero-value-demo.gopackage main
import "fmt"
func main() {
var jumlah int
var harga float64
var aktif bool
var nama string
var daftar []string
var alamat *int
fmt.Println("jumlah =", jumlah)
fmt.Println("harga =", harga)
fmt.Println("aktif =", aktif)
fmt.Printf("nama = %q\n", nama)
fmt.Println("daftar =", daftar)
fmt.Println("alamat =", alamat)
jumlah = jumlah + 5
fmt.Println("jumlah setelah ditambah 5 =", jumlah)
}Output yang Dihasilkan:
jumlah = 0
harga = 0
aktif = false
nama = ""
daftar = []
alamat = <nil>
jumlah setelah ditambah 5 = 5Mari kita telaah baris demi baris program di atas:
- Baris 6–11 (
var jumlah intdan kawan-kawannya): mendeklarasikan enam variabel dari enam kelompok tipe, semuanya tanpa nilai awal sehingga berisi zero value masing-masing. - Baris 13–15: mencetak
jumlah,harga, danaktifyang memperlihatkan0,0, danfalse— angka nol padafloat64dicetak sebagai0, bukan0.0. - Baris 16 (
fmt.Printf("nama = %q\n", nama)): memakai verb%qagar string kosong terlihat jelas sebagai"", bukan baris kosong yang sulit diamati. - Baris 17–18: mencetak slice dan pointer yang nilainya
nil;fmtmenampilkan slicenilsebagai[]dan pointernilsebagai<nil>. - Baris 20 (
jumlah = jumlah + 5): membaca zero value0sebagai titik awal perhitungan, sehingga hasilnya5.
Zero Value sebagai Titik Awal #
Baris terakhir program di atas memperlihatkan pola yang sering dipakai: zero value adalah nilai yang sah untuk dihitung, bukan keadaan error. Penghitung dimulai dari 0, akumulator penjumlahan dimulai dari 0, dan status boolean dimulai dari false sebelum diperiksa. Untuk tipe bentukan seperti struct, zero value diberikan per field: struct dengan field Nama string dan Umur int otomatis berisi "" dan 0 tanpa perlu inisialisasi manual.
Perbedaan nil dan "" pada String #
Pemula yang datang dari bahasa lain sering menganggap string kosong sebagai nil. Di Go, tipe string tidak memiliki nilai nil: string tanpa isi selalu "" dengan panjang nol, dan nil hanya milik kelompok tipe referensi seperti pointer, slice, dan map. Pemeriksaan nama == nil pada variabel string adalah galat kompilasi, sedangkan nama == "" adalah perbandingan yang sah.
Dengan jaminan zero value ini, kita bisa mendeklarasikan variabel jauh sebelum dipakai tanpa takut program berperilaku acak. Selanjutnya, ketika variabel sudah siap diisi nilai tetap dari kelompok true/false, angka, atau teks, kita masuk ke tipe data pertama yang paling sederhana: boolean.
Referensi #
- Spesifikasi Go: Variables — bagian akhir halaman mendefinisikan zero value setiap kelompok tipe.
- A Tour of Go: Basics — latihan interaktif mengenai nilai awal variabel.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
zero-value-demo.go
Unduh berkaspackage main
import "fmt"
func main() {
var jumlah int
var harga float64
var aktif bool
var nama string
var daftar []string
var alamat *int
fmt.Println("jumlah =", jumlah)
fmt.Println("harga =", harga)
fmt.Println("aktif =", aktif)
fmt.Printf("nama = %q\n", nama)
fmt.Println("daftar =", daftar)
fmt.Println("alamat =", alamat)
jumlah = jumlah + 5
fmt.Println("jumlah setelah ditambah 5 =", jumlah)
}