Rumah >pembangunan bahagian belakang >Golang >Mengapa Go Slice Range Gelung Berikan Alamat Yang Sama kepada Kekunci Peta Apabila Menggunakan `&stu`?
Mengetahui Fenomena Julat Go Slice
Dalam coretan kod yang disediakan, sepotong struct pelajar diulang menggunakan kata kunci julat. Walau bagaimanapun, penugasan alamat pelajar pada peta mendedahkan isu yang kelihatan membingungkan: kekunci peta yang terhasil mempunyai alamat yang sama.
Untuk memahami fenomena ini, adalah penting untuk menyedari bahawa dalam Go, kata kunci julat berulang sepanjang elemen kepingan, bukan alamat. Ini bermakna pembolehubah stu dalam gelung julat ialah salinan elemen hirisan. Akibatnya, apabila alamat stu diambil dan diberikan kepada kunci peta, alamat salinan, bukan elemen hirisan, disimpan.
Untuk membetulkannya, seseorang perlu mengubah suai kod untuk mengambil secara eksplisit alamat unsur hirisan. Ini boleh dicapai dengan menggunakan pembolehubah indeks hirisan i:
for i := range s { m[s[i].Name] = &s[i] }
Pengubahsuaian ini memastikan kekunci peta memegang alamat elemen hirisan sebenar.
Dengan memahami perbezaan antara mengulang semula elemen slice dan mengambil alamatnya, pembangun boleh mengelakkan kemungkinan kekeliruan dan memastikan gelagat kod mereka yang dimaksudkan apabila bekerja dengan slice dalam Go.
Atas ialah kandungan terperinci Mengapa Go Slice Range Gelung Berikan Alamat Yang Sama kepada Kekunci Peta Apabila Menggunakan `&stu`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!