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!