Menggunakan Indeks Tatasusunan untuk Pengubahsuaian Elemen Daripada Nilai Julat
Dalam pengaturcaraan Go, kata kunci julat berulang pada koleksi dan mengembalikan kedua-dua kunci dan salinan nilai untuk setiap elemen. Tingkah laku ini boleh menghalang pengubahsuaian nilai dalam gelung. Contoh berikut menunjukkan isu ini:
package main import "fmt" type MyType struct { field string } func main() { var array [10]MyType // Attempt to modify field using range values: for _, e := range array { e.field = "foo" } // Verify that field hasn't been modified: for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
Dalam kod ini, kami cuba mengubah suai medan setiap elemen dalam tatasusunan menggunakan gelung julat. Walau bagaimanapun, memandangkan julat mengembalikan salinan nilai, elemen sebenar dalam tatasusunan kekal tidak berubah. Ini menyebabkan semua nilai medan kekal kosong.
Penyelesaian: Menggunakan Indeks Tatasusunan
Untuk menyelesaikan isu ini dan mengubah suai elemen sebenar, anda harus menggunakan indeks tatasusunan bukannya nilai yang dikembalikan oleh gelung julat. Berikut ialah kod yang diubah suai:
import "fmt" type MyType struct { field string } func main() { var array [10]MyType // Modify field using array indices: for idx, _ := range array { array[idx].field = "foo" } // Verify that field has been modified: for _, e := range array { fmt.Println(e.field) fmt.Println("--") } }
Dengan menggunakan indeks setiap elemen dan bukannya nilai, kami boleh terus mengakses dan mengubah suai elemen sebenar dalam tatasusunan. Ini memastikan bahawa nilai medan dikemas kini dengan betul.
Atas ialah kandungan terperinci Mengapakah Menggunakan Kata Kunci Julat Go Gagal Mengubah Suai Elemen Tatasusunan, dan Bagaimanakah Indeks Tatasusunan Boleh Memberikan Penyelesaian?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!