Seperti yang sudah dijelaskan orang lain, :=
adalah untuk deklarasi, penugasan, dan juga untuk deklarasi ulang; dan itu menebak ( menyimpulkan ) tipe variabel secara otomatis.
Sebagai contoh, foo := 32
adalah bentuk tulisan tangan dari:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
/ * Ada beberapa aturan: * /
β
Aturan 1:
Anda tidak dapat menggunakan :=
dari funcs
. Itu karena, di luar fungsi apa pun, pernyataan harus dimulai dengan kata kunci.
// no keywords below, illegal.
illegal := 42
// `var` keyword makes this statement legal.
var legal = 42
func foo() {
alsoLegal := 42
// reason: it's in a func scope.
}
β
Aturan Kedua:
Anda tidak dapat menggunakannya dua kali ( dalam cakupan yang sama ):
legal := 42
legal := 42 // <-- error
Karena, :=
memperkenalkan "variabel baru" , maka menggunakannya dua kali tidak mendeklarasikan ulang variabel kedua, jadi itu ilegal.
β
Aturan ke-3:
Anda dapat menggunakannya untuk deklarasi dan penugasan multi-variabel:
foo, bar := 42, 314
jazz, bazz := 22, 7
β
Aturan ke-4 (Deklarasi Ulang):
Anda dapat menggunakannya dua kali dalam deklarasi "multi-variabel" , jika salah satu variabel baru :
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
Ini legal, karena, Anda tidak mendeklarasikan semua variabel, Anda hanya menugaskan kembali nilai-nilai baru ke variabel yang ada, dan mendeklarasikan variabel baru secara bersamaan. Ini disebut deklarasi ulang .
β
Aturan ke-5:
Anda dapat menggunakan deklarasi singkat untuk mendeklarasikan variabel dalam cakupan yang lebih baru bahkan variabel itu sudah dideklarasikan dengan nama yang sama sebelumnya:
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
Di sini, foo := 42
adalah legal, karena, ia menyatakan foo
dalam some()
lingkup func. foo = 314
legal, karena, itu hanya memberikan nilai baru foo
.
β
Aturan 6:
Anda dapat mendeklarasikan nama yang sama di blok pernyataan pendek seperti: jika , untuk , beralih :
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
Karena, foo
dalam if foo := ...
, hanya milik if
klausa itu dan itu dalam lingkup yang berbeda.
Jadi, sebagai aturan umum: Jika Anda ingin dengan mudah mendeklarasikan variabel yang dapat Anda gunakan :=
, atau, jika Anda hanya ingin menimpa variabel yang ada, Anda dapat menggunakan =
.
Referensi: