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:

go
pesan := "Halo"        // string
jam := 20              // int
sudahLunas := true     // bool

Ketiga 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:

go
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:

go
pesan, jam := "Selamat datang", 20

Bentuk 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:

go
var versi = "1.0" // sah di level package

versi := "1.0"    // galat: := tidak sah di level package

Compiler menolak baris kedua dengan pesan syntax error: unexpected :=, expected = karena parser Go tidak mengizinkan := pada area deklarasi package.

Memilih var atau := #

SituasiBentuk yang tepatAlasan
Variabel lokal dengan nilai awalnama := "Budi"Ringkas dan idiomatik
Variabel lokal tanpa nilai awalvar saldo int:= selalu butuh nilai di kanan
Variabel level packagevar versi = "1.0":= tidak diizinkan
Tipe spesifik seperti uint16var port uint16 = 8080Tipe hasil inferensi bisa berbeda dari kebutuhan

Program Utuh #

Berkas deklarasi-pendek-demo.go merangkai seluruh aturan di atas. Jalankan berkas tersebut dari direktori chapter:

bash
go run deklarasi-pendek-demo.go
go
package 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:

text
Halo, Siti!
Selamat pagi, Siti!
Selamat datang pada pukul 20

Mari kita telaah baris demi baris program di atas:

  1. Baris 6 (pesan := "Halo"): mendeklarasikan variabel lokal pesan bertipe string melalui deklarasi pendek.
  2. Baris 7 (penerima := "Siti"): mendeklarasikan variabel kedua yang akan tetap tidak berubah sepanjang program.
  3. Baris 9 (pesan = "Selamat pagi"): menimpa nilai pesan dengan operator = biasa karena variabel tersebut sudah ada.
  4. Baris 12 (pesan, jam := "Selamat datang", 20): melakukan redeclaration — pesan lama ditimpa nilainya, jam dideklarasikan baru bertipe int.
  5. 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 #

Berkas Sumber

Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.

deklarasi-pendek-demo.go

Unduh berkas
go
package 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)
}