Mengemas kini Nilai Struktur dalam Go
Dalam Go, struct ialah jenis nilai, yang bermaksud menugaskan satu struct kepada yang lain menyalin nilainya dan bukannya mencipta rujukan. Ini boleh membawa kepada tingkah laku yang tidak dijangka apabila cuba mengubah suai nilai dalam struktur bersarang.
Pertimbangkan coretan kod berikut:
ftr := FTR{} err := yaml.Unmarshal([]byte(yamlFile), &ftr) for index, element := range ftr.Mod { switch element.Type { case "aaa", "bbbb": element.Type = "cccc" case "htr": element.Type = "com" case "no": element.Type = "jnodejs" case "jdb": element.Type = "tomcat" } }
Niatnya adalah untuk mengemas kini medan Jenis setiap elemen Mod dalam struktur ftr berdasarkan satu siri syarat. Walau bagaimanapun, selepas kod dilaksanakan, medan Jenis bagi setiap elemen kekal tidak berubah.
Tingkah laku ini disebabkan oleh fakta bahawa gelung julat berulang pada salinan kepingan ftr.Mod. Akibatnya, sebarang pengubahsuaian yang dibuat pada pembolehubah elemen dalam gelung tidak ditunjukkan dalam kepingan ftr.Mod asal.
Untuk menyelesaikan isu ini dan mengemas kini nilai dengan betul dalam struktur ftr, anda boleh menggunakan lelaran berasaskan indeks bukannya berkisar di atas kepingan. Ini membolehkan anda mengubah suai nilai secara terus dalam kepingan asal:
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" } }
Dengan melelaran ke atas indeks hirisan ftr.Mod dan mengubah suai terus elemen yang sepadan, anda memastikan bahawa struktur ftr asal dikemas kini sebagai dimaksudkan.
Atas ialah kandungan terperinci Bagaimana untuk Mengemas kini Nilai Struktur Bersarang dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!