Rumah >pembangunan bahagian belakang >Golang >Bagaimanakah Gelung Julat Slice Go Mempengaruhi Penetapan Alamat dalam Peta?

Bagaimanakah Gelung Julat Slice Go Mempengaruhi Penetapan Alamat dalam Peta?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-03 07:06:09368semak imbas

How Does Go's Slice Range Loop Affect Address Assignment in Maps?

Memahami Gelagat Go Slice Ranges

In Go, slices ialah struktur data asas yang menyediakan storan elemen yang cekap dan dinamik. Apabila bekerja dengan kepingan, adalah penting untuk memahami kelakuan gelung julat.

Pertimbangkan coretan kod berikut:

type student struct {
    Name string
    Age  int
}

func main() {
    m := make(map[string]*student)
    s := []student{
        {Name: "Allen", Age: 24},
        {Name: "Tom", Age: 23},
    }

    for _, stu := range s {
        m[stu.Name] = &stu
    }
    fmt.Println(m)
    for key, value := range m {
        fmt.Println(key, value)
    }
}

Kod mentakrifkan sekeping struct pelajar dan peta. Ia berulang ke atas hirisan menggunakan gelung julat, di mana setiap elemen ditugaskan kepada pembolehubah 'stu.' Walau bagaimanapun, tingkah laku tidak dijangka yang diperhatikan ialah semua entri peta menghala ke alamat yang sama dalam hirisan.

Punca Punca:

Isu ini berpunca daripada tugasan gelung julat kepada pembolehubah 'stu.' Apabila gelung berulang, 'stu' diberikan salinan elemen hirisan pada indeks tersebut. Akibatnya, semua entri peta merujuk kepada nilai yang disalin yang sama.

Penyelesaian:

Untuk menyelesaikan kelakuan ini, kod tersebut hendaklah secara eksplisit mengambil alamat setiap keping elemen sebelum menyimpannya dalam peta:

for i := range s {
    m[s[i].Name] = &s[i]
}

Dengan membuat perubahan ini, setiap entri peta kini merujuk hirisan sebenar alamat elemen, memastikan tingkah laku yang diharapkan. Ini menunjukkan kepentingan memahami nuansa gelung julat hirisan dan cara ia boleh mempengaruhi manipulasi data dalam Go.

Atas ialah kandungan terperinci Bagaimanakah Gelung Julat Slice Go Mempengaruhi Penetapan Alamat dalam Peta?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn