Memahami Tugasan Bercampur dan Pengisytiharan dalam Go
Apabila bekerja dengan Go, adalah perkara biasa untuk menghadapi situasi di mana anda perlu menetapkan nilai pada pembolehubah secara serentak , termasuk pengisytiharan sedia ada dan baharu. Walau bagaimanapun, seperti yang anda temui, ini kadangkala boleh membawa kepada ralat yang tidak dijangka.
Mari kita lihat dengan lebih dekat isu yang telah anda kemukakan:
a := 1 { a, b := 2, 3 }
Dalam contoh ini, anda' cuba untuk mengisytiharkan semula pembolehubah sedia ada a dan mencipta pembolehubah baru b. Go mengikut prinsip pembayang pembolehubah, di mana nilai dan jenis baharu boleh dikaitkan dengan pembolehubah sedia ada dalam skop dalaman.
Apabila menggunakan := dalam skop dalam, walaupun ia blok dengan pendakap, ia berkesan mencipta pembolehubah baharu dengan nama yang sama seperti yang sedia ada. Dalam kes ini, pengkompil mentafsir baris a, b := 2, 3 sebagai mengisytiharkan semula a dalam skop dalaman dan mencipta pembolehubah baharu b.
Untuk mengelakkan isu ini, anda boleh menggunakan beberapa pendekatan:
Dalam contoh khusus yang anda berikan, a := 1; a, b := 2, 3 sintaks bertujuan untuk mengubah suai nilai a dan mencipta pembolehubah baharu b. Untuk mencapai ini dengan betul, anda boleh menulisnya seperti berikut:
a := 1 a, b = 2, 3
Contoh ini menggunakan operator = untuk kedua-dua tugasan, menghapuskan isu pembayang pembolehubah dan mengemas kini nilai a while mencipta pembolehubah baharu b dengan betul.
Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan Bayangan Pembolehubah Apabila Mencampurkan Pengisytiharan Pembolehubah dan Tugasan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!