Rumah >pembangunan bahagian belakang >Golang >Mengapakah Nilai Struktur Tidak Dikemas Kini Semasa Lelaran dalam Go?

Mengapakah Nilai Struktur Tidak Dikemas Kini Semasa Lelaran dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-12-09 13:14:15789semak imbas

Why are Struct Values Not Updated During Iteration in Go?

Cara Mengemas kini Nilai Struktur Secara Berkesan Semasa Lelaran

Dalam coretan kod ini, kami mempunyai struct FTR dengan tatasusunan struct Mod. Kami berhasrat untuk mengemas kini medan Jenis elemen Mod berdasarkan kriteria tertentu dalam gelung. Walau bagaimanapun, nampaknya perubahan yang dibuat dalam gelung tidak ditunjukkan dalam struktur FTR selepas gelung selesai.

Isunya

Inti masalah terletak pada hakikat bahawa apabila anda mengulangi kepingan atau tatasusunan menggunakan kata kunci julat, anda hanya mendapat salinan elemen, bukan rujukan kepada elemen asal. Ini bermakna bahawa apa-apa pengubahsuaian yang anda buat pada elemen dalam gelung hanya akan menjejaskan salinan, meninggalkan elemen asal tidak berubah.

Penyelesaian: Lelaran dengan Indeks

Untuk betul kemas kini unsur-unsur struct, kita perlu mengulangi indeksnya dan mengubah suai elemen asal dan bukannya salinannya. Berikut ialah kod yang diperbetulkan:

type FTR struct {
    Id       string     
    Mod      []Mod  
}

for index := range ftr.Mod{
    switch ftr.Mod[index].Type {
    case “aaa”, “bbbb”:
        ftr.Mod[index].Type = "cccc”
    case "htr”:
        ftr.Mod[index].Type = "com"
    case "no":
        ftr.Mod[index].Type = "jnodejs"
    case "jdb”:
        ftr.Mod[index].Type = "tomcat"
    }

}

Dalam kod yang dikemas kini ini, kami mengulangi indeks tatasusunan Mod dan mengubah suai medan Jenis terus pada struct FTR asal. Dengan berbuat demikian, kami memastikan bahawa perubahan yang dibuat dalam gelung dikekalkan apabila gelung selesai.

Atas ialah kandungan terperinci Mengapakah Nilai Struktur Tidak Dikemas Kini Semasa Lelaran dalam Go?. 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