Dalam kod yang disediakan, dua variasi gelung mempamerkan gelagat berbeza apabila mengakses elemen daripada kepingan. Loop1 mengembalikan "kemas kini" berulang kali, manakala Loop2 mencetak urutan jangkaan "padam," "kemas kini" dan "buat."
Kunci untuk memahami perbezaan ini terletak pada cara pembolehubah gelung (cmd) digunakan dalam penutupan (func()). Dalam Loop1, rujukan kepada pembolehubah gelung disimpan dalam penutupan. Ini bermakna bahawa sebarang perubahan seterusnya kepada cmd akan menjejaskan semua penutupan dalam peta.
Apabila gelung kedua dilaksanakan, nilai cmd telah pun dikemas kini kepada "kemas kini", elemen terakhir dalam kepingan cmds. Oleh itu, semua penutupan dalam peta merujuk kepada nilai terakhir ini, menghasilkan output "kemas kini" berulang.
Dalam Gelung2, walau bagaimanapun, salinan pembolehubah gelung ialah disimpan dalam penutup. Ini mencipta pembolehubah terpisah yang tidak terjejas oleh perubahan seterusnya kepada cmd asal. Setiap lelaran gelung memberikan nilai yang berbeza kepada cmd2, yang kemudiannya dirujuk oleh penutupan.
Hasilnya, gelung kedua mencetak dengan betul setiap elemen hirisan cmds.
Untuk mengelakkan isu rujukan sedemikian, biasanya disyorkan untuk menggunakan indeks hirisan dan bukannya pembolehubah gelung apabila mengakses elemen dalam penutupan. Dengan cara ini, setiap penutupan boleh mengakses elemen yang betul tanpa mengira perubahan pada pembolehubah gelung.
Nilai kedua yang dikembalikan oleh gelung julat (salinan elemen) boleh berguna apabila anda ingin menghantar nilai kepada goroutine atau utas yang berasingan tanpa perlu risau tentang akses serentak kepada pembolehubah asal. Ini memudahkan tugasan yang memerlukan perkongsian data tanpa rasa takut merosakkan sumber.
Atas ialah kandungan terperinci Mengapa Kelakuan Gelung Golang Berbeza Apabila Menggunakan Rujukan berbanding Salinan Pembolehubah Gelung?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!