Menulis kata kunci var berulang-ulang terasa membosankan ketika kita membuat banyak variabel lokal sekaligus. Go menyediakan bentuk singkat := (titik dua diikuti tanda sama dengan) yang mendeklarasikan variabel sekaligus mengisinya dalam satu langkah, tanpa kata kunci var dan tanpa menuliskan tipe. Bentuk ini adalah gaya paling umum untuk variabel lokal di dalam fungsi. Pada chapter ini kita akan mempelajari bentuk deklarasi pendek, aturan redeclaration-nya, dan batasan di mana := tidak boleh dipakai.
Bentuk Deklarasi Pendek #
Deklarasi pendek mengikat nama baru ke nilai di sisi kanan operator :=, lalu compiler menyimpulkan tipe dari nilai tersebut. Perhatikan tiga baris berikut:
pesan := "Halo" // string
jam := 20 // int
sudahLunas := true // boolKetiga variabel dideklarasikan tanpa var dan tanpa tipe eksplisit, sama seperti bentuk var pesan = "Halo" pada chapter Variabel
. Perbedaannya murni gaya penulisan: := lebih ringkas dan idiomatik untuk variabel lokal yang langsung diisi nilai.
Menimpa Nilai dengan Assignment Biasa #
Setelah variabel dideklarasikan, nilai variabel tersebut diubah dengan operator = biasa, bukan dengan := lagi. Aturan penulisan ini penting dipahami sebelum kita membahas redeclaration:
pesan := "Halo"
pesan = "Selamat pagi"Baris pertama mendeklarasikan pesan dengan nilai "Halo", lalu baris kedua menimpa nilainya menjadi "Selamat pagi" tanpa membuat variabel baru.
Redeclaration: Minimal Satu Variabel Baru #
Operator := tetap boleh dipakai ulang untuk nama yang sudah ada, dengan satu syarat ketat: minimal satu nama di sisi kiri harus benar-benar baru. Ketika syarat ini terpenuhi, := menugaskan ulang variabel lama dan mendeklarasikan variabel baru pada saat yang sama:
pesan, jam := "Selamat datang", 20Bentuk di atas sah ketika pesan sudah ada (nilainya ditimpa) dan jam belum pernah dideklarasikan. Sebaliknya, jika seluruh nama di sisi kiri sudah ada, compiler menolak dengan pesan no new variables on left side of :=. Solusinya adalah memakai operator = biasa untuk penugasan ulang.
Batasan: Hanya di Dalam Fungsi #
Deklarasi pendek hanya sah di dalam tubuh fungsi. Pada level package, di luar semua fungsi, setiap deklarasi harus memakai kata kunci var, const, type, atau func. Kode berikut gagal dikompilasi:
var versi = "1.0" // sah di level package
versi := "1.0" // galat: := tidak sah di level packageCompiler menolak baris kedua dengan pesan syntax error: unexpected :=, expected = karena parser Go tidak mengizinkan := pada area deklarasi package.
Memilih var atau := #
| Situasi | Bentuk yang tepat | Alasan |
|---|---|---|
| Variabel lokal dengan nilai awal | nama := "Budi" | Ringkas dan idiomatik |
| Variabel lokal tanpa nilai awal | var saldo int | := selalu butuh nilai di kanan |
| Variabel level package | var versi = "1.0" | := tidak diizinkan |
Tipe spesifik seperti uint16 | var port uint16 = 8080 | Tipe hasil inferensi bisa berbeda dari kebutuhan |
Program Utuh #
Berkas deklarasi-pendek-demo.go merangkai seluruh aturan di atas. Jalankan berkas tersebut dari direktori chapter:
go run deklarasi-pendek-demo.gopackage main
import "fmt"
func main() {
pesan := "Halo"
penerima := "Siti"
fmt.Println(pesan + ", " + penerima + "!")
pesan = "Selamat pagi"
fmt.Println(pesan + ", " + penerima + "!")
pesan, jam := "Selamat datang", 20
fmt.Println(pesan, "pada pukul", jam)
}Output yang Dihasilkan:
Halo, Siti!
Selamat pagi, Siti!
Selamat datang pada pukul 20Mari kita telaah baris demi baris program di atas:
- Baris 6 (
pesan := "Halo"): mendeklarasikan variabel lokalpesanbertipestringmelalui deklarasi pendek. - Baris 7 (
penerima := "Siti"): mendeklarasikan variabel kedua yang akan tetap tidak berubah sepanjang program. - Baris 9 (
pesan = "Selamat pagi"): menimpa nilaipesandengan operator=biasa karena variabel tersebut sudah ada. - Baris 12 (
pesan, jam := "Selamat datang", 20): melakukan redeclaration —pesanlama ditimpa nilainya,jamdideklarasikan baru bertipeint. - Baris 13: mencetak ketiga hasil agar setiap variabel benar-benar terpakai dan lolos dari pemeriksaan
declared and not used.
Dengan menguasai :=, kita dapat menulis kode lokal yang ringkas tanpa kehilangan kejelasan tipe, karena compiler tetap menyimpulkan tipe setiap variabel dengan aturan yang akan kita bahas pada chapter Inferensi Tipe
.
Referensi #
- Spesifikasi Go: Assignments
— bagian short variable declarations menjelaskan aturan
:=secara resmi. - Effective Go — panduan gaya deklarasi variabel yang idiomatik.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
deklarasi-pendek-demo.go
Unduh berkaspackage main
import "fmt"
func main() {
pesan := "Halo"
penerima := "Siti"
fmt.Println(pesan + ", " + penerima + "!")
pesan = "Selamat pagi"
fmt.Println(pesan + ", " + penerima + "!")
pesan, jam := "Selamat datang", 20
fmt.Println(pesan, "pada pukul", jam)
}