Rumah >pembangunan bahagian belakang >Golang >Mengapa Mengubah Suai Nilai Menggunakan Kata Kunci `julat` Go Gagal, dan Bagaimanakah Indeks Tatasusunan Boleh Memberikan Penyelesaian?
Penggunaan Indeks Tatasusunan berbanding Nilai Julat
Apabila menggunakan kata kunci julat dengan tatasusunan atau kepingan dalam Go, adalah penting untuk memahami bahawa ia mengembalikan kunci dan salinan nilai, bukan rujukan nilai asal. Tingkah laku ini boleh menyebabkan kekeliruan apabila cuba mengubah suai nilai dalam koleksi semasa lelaran.
Dalam contoh yang disediakan:
package main import "fmt" type MyType struct { field string } func main() { var array [10]MyType for _, e := range array { e.field = "foo" } for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
Lelaran julat dijangka memberikan rentetan "foo" kepada medan setiap elemen dalam tatasusunan. Walau bagaimanapun, apabila gelung kedua mencetak nilai yang dikemas kini, semua medan kekal kosong. Ini disebabkan oleh julat semantik berasaskan salinan.
Untuk mengubah suai nilai dalam tatasusunan secara berkesan semasa lelaran, anda perlu menggunakan indeks tatasusunan dan bukannya pembolehubah julat:
package main import "fmt" type MyType struct { field string } func main() { var array [10]MyType for idx, _ := range array { array[idx].field = "foo" } for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
Pengubahsuaian ini memastikan pembolehubah indeks merujuk kepada elemen sebenar dalam tatasusunan, membenarkan kemas kini medan yang betul dan output yang betul dalam gelung kedua.
Atas ialah kandungan terperinci Mengapa Mengubah Suai Nilai Menggunakan Kata Kunci `julat` Go Gagal, dan Bagaimanakah Indeks Tatasusunan Boleh Memberikan Penyelesaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!