Jika Anda ingin menggunakan jenis x := uint32(123)karya tertentu misalnya. Pasti jelas bagi kebanyakan orang, tetapi saya harus berpikir beberapa menit ;-)
jadi apakah itu berarti variabel dengan tipe yang disimpulkan? Baik?
Krupal Shah
@KrupalShah tautan ke dokumen secara harfiah mengatakan bahwa - "Ini adalah singkatan untuk deklarasi variabel reguler dengan ekspresi penginisialisasi tetapi tanpa tipe:" golang.org/ref/spec#Short_variable_declarations
Apakah ada use case untuk =sebagai lawan :=? Haruskah Anda selalu menggunakan :=?
Kenny Worden
3
@KennethWorden Go tidak akan membiarkan Anda menggunakan :=untuk menetapkan ke variabel yang telah dideklarasikan, kecuali Anda menugaskan ke beberapa variabel sekaligus, dan setidaknya salah satu dari variabel tersebut adalah baru.
Kenny Bania
5
yang inttidak diperlukan, var foo = 10adalah sama denganfoo := 10
Gary Lyn
@ KennyWorden, ya. Anda tidak dapat menggunakan: = di luar fungsi.
Karuhanga
106
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 := 32adalah 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 := 42adalah legal, karena, ia menyatakan foodalam some()lingkup func. foo = 314legal, karena, itu hanya memberikan nilai baru foo.
โ Aturan 6:
Anda dapat mendeklarasikan nama yang sama di blok pernyataan pendek seperti: jika , untuk , beralih :
foo :=42if foo := someFunc(); foo ==314{// foo is scoped to 314 here// ...}// foo is still 42 here
Karena, foodalam if foo := ..., hanya milik ifklausa 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 =.
aakan dinyatakan sebagai intdan diinisialisasi dengan nilai di 10mana sebagaimana bakan dinyatakan sebagai string dan diinisialisasi dengan nilai gopher.
Penggunaan setara mereka =akan
var a =10var b ="gopher"
=adalah operator penugasan. Ini digunakan dengan cara yang sama seperti Anda menggunakannya dalam bahasa lain.
Anda dapat menghilangkan tipe ketika Anda mendeklarasikan variabel dan initializer hadir ( http://tour.golang.org/#11 ).
ยซ= Adalah operator penugasan. Ini digunakan dengan cara yang sama seperti Anda menggunakannya dalam bahasa lain. ยป Kecuali di Ada di mana =hanya untuk perbandingan dan :=untuk penugasan ...
Alexis Wilke
13
The: = berarti mendeklarasikan dan menetapkan sementara = berarti untuk menetapkan secara sederhana.
x := uint32(123)
karya tertentu misalnya. Pasti jelas bagi kebanyakan orang, tetapi saya harus berpikir beberapa menit ;-)Jawaban:
Hanya
=
operator penugasan.:=
adalah bagian dari sintaks klausa deklarasi variabel pendek .๐ Namun ada beberapa aturan. Lihat jawaban lain ini untuk lebih jelasnya.
sumber
:=
terdaftar sebagai operator di sini golang.org/ref/spec#Operators_and_punctuation , jadi saya tidak yakin saya setuju bahwa ":=
sebenarnya bukan operator"In Go,
:=
untuk deklarasi + penugasan, sedangkan=
untuk penugasan saja.Misalnya,
var foo int = 10
sama denganfoo := 10
.sumber
=
sebagai lawan:=
? Haruskah Anda selalu menggunakan:=
?:=
untuk menetapkan ke variabel yang telah dideklarasikan, kecuali Anda menugaskan ke beberapa variabel sekaligus, dan setidaknya salah satu dari variabel tersebut adalah baru.int
tidak diperlukan,var foo = 10
adalah sama denganfoo := 10
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:/ * Ada beberapa aturan: * /
โ Aturan 1:
Anda tidak dapat menggunakan
:=
darifuncs
. Itu karena, di luar fungsi apa pun, pernyataan harus dimulai dengan kata kunci.โ Aturan Kedua:
Anda tidak dapat menggunakannya dua kali ( dalam cakupan yang sama ):
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:
โ Aturan ke-4 (Deklarasi Ulang):
Anda dapat menggunakannya dua kali dalam deklarasi "multi-variabel" , jika salah satu variabel baru :
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:
Di sini,
foo := 42
adalah legal, karena, ia menyatakanfoo
dalamsome()
lingkup func.foo = 314
legal, karena, itu hanya memberikan nilai barufoo
.โ Aturan 6:
Anda dapat mendeklarasikan nama yang sama di blok pernyataan pendek seperti: jika , untuk , beralih :
Karena,
foo
dalamif foo := ...
, hanya milikif
klausa itu dan itu dalam lingkup yang berbeda.Referensi:
Aturan Deklarasi Variabel Pendek
Panduan Visual untuk Go Variables
sumber
:=
adalah kependekan dari deklarasi.a
akan dinyatakan sebagaiint
dan diinisialisasi dengan nilai di10
mana sebagaimanab
akan dinyatakan sebagai string dan diinisialisasi dengan nilaigopher
.Penggunaan setara mereka
=
akan=
adalah operator penugasan. Ini digunakan dengan cara yang sama seperti Anda menggunakannya dalam bahasa lain.Anda dapat menghilangkan tipe ketika Anda mendeklarasikan variabel dan initializer hadir ( http://tour.golang.org/#11 ).
sumber
=
hanya untuk perbandingan dan:=
untuk penugasan ...The: = berarti mendeklarasikan dan menetapkan sementara = berarti untuk menetapkan secara sederhana.
sumber
:=
mendeklarasikan dan memberikan,=
hanya menetapkanIni berguna ketika Anda tidak ingin mengisi kode Anda dengan deklarasi tipe atau struct.
sumber
dari dokumen referensi: ( tour.golang.org )
Di dalam suatu fungsi ,
:=
pernyataan penugasan singkat dapat digunakan sebagai pengganti deklarasi var dengan tipe implisit.Di luar fungsi , setiap konstruk dimulai dengan kata kunci (var, func, dan sebagainya) dan: = konstruk tidak tersedia.
sumber
โ: =โ Gunakan untuk melakukan deklarasi dan initilisasi secara bersamaan, berikut ini adalah contohnya.
Penggunaan "="
var saya int
i = 10
https://play.golang.org/p/RU88ty_SGa
Penggunaan ": ="
i: = 10
https://play.golang.org/p/XBdjBh-DQB
sumber
Keduanya adalah teknik deklarasi variabel yang berbeda dalam bahasa Go.
DAN
Deklarasi variabel pendek adalah singkatan untuk deklarasi variabel reguler dengan ekspresi initializer tetapi tanpa tipe.
Baca di bawah untuk detail:
Deklarasi variabel
Deklarasi variabel pendek
sumber