Baru-baru ini, semasa saya menulis kod di Golang, saya mengalami ralat: "tidak boleh menetapkan kepada pembolehubah julat..." Ralat ini membuatkan saya sangat tertekan kerana saya tidak tahu cara menyelesaikannya. Selepas beberapa penerokaan dan penyelidikan, akhirnya saya menemui penyelesaiannya dan kini saya berkongsi dengan anda.
Mula-mula, mari kita lihat senario di mana ralat ini berlaku. Dalam Golang, kami biasanya menggunakan kata kunci julat untuk mengulang elemen dalam bekas (seperti tatasusunan, kepingan, dll.). Apabila kami ingin mengubah suai elemen semasa proses lelaran, ralat "tidak boleh menetapkan kepada pembolehubah julat..." akan muncul. Berikut ialah contoh:
package main import "fmt" func main() { nums := []int{1, 2, 3, 4, 5} for _, num := range nums { num = num * 2 // 报错:“cannot assign to range variable num” } fmt.Println(nums) }
Dalam contoh ini, kami ingin mendarab setiap elemen dalam nombor dengan 2. Walau bagaimanapun, ralat berlaku semasa proses penyusunan, "tidak boleh menetapkan kepada bilangan pembolehubah julat Ini sebabnya kain bulu?
Sebabnya ialah lelaran kata kunci julat dalam Golang mendapat salinan elemen, bukan elemen itu sendiri. Menukar salinan dalam badan gelung tidak mengubah elemen asal. Oleh itu, mengubah suai nilai num adalah tidak sah, dan ralat berlaku.
Jadi bagaimana untuk menyelesaikan masalah ini? Terdapat dua cara untuk menyelesaikannya.
Kaedah 1: Gunakan lelaran indeks
Kita boleh menggunakan indeks dalam gelung for untuk mengulang elemen dalam bekas, dan kemudian mengubah suai nilai elemen asal dan bukannya mengubah suai nilai salinan. Berikut ialah pelaksanaan kod:
package main import "fmt" func main() { nums := []int{1, 2, 3, 4, 5} for i := range nums { nums[i] = nums[i] * 2 } fmt.Println(nums) }
Dalam kod tersebut, kami menggunakan i sebagai indeks untuk mengulangi elemen dalam nombor bekas dan mengubah suai nilai nombor[i]. Dengan cara ini, nilai elemen asal boleh berjaya diubah suai, dan hasil output ialah [2 4 6 8 10].
Kaedah 2: Gunakan penunjuk
Kita juga boleh menggunakan penunjuk kepada elemen untuk menyelesaikan masalah ini. Nilai elemen asal boleh diubah suai dengan menghantar penunjuk kepada salinan berulang sebagai parameter kepada fungsi. Berikut ialah pelaksanaan kod:
package main import "fmt" func double(num *int) { *num = *num * 2 } func main() { nums := []int{1, 2, 3, 4, 5} for i, num := range nums { double(&nums[i]) } fmt.Println(nums) }
Dalam kod, kami mentakrifkan fungsi berganda yang parameternya adalah penunjuk kepada jenis int. Dalam gelung untuk, kami mengulangi elemen nombor bekas dan menghantar penuding salinan lelaran kepada fungsi berganda, yang mengubah suai nilai elemen asal dan mengembalikannya. Dengan cara ini, nilai elemen asal boleh berjaya diubah suai, dan hasil output ialah [2 4 6 8 10].
Ringkasnya, kita boleh menggunakan dua kaedah untuk menyelesaikan ralat "cannot assign to range variable..." dalam Golang, iaitu menggunakan lelaran indeks dan menggunakan penunjuk. Ia adalah perlu untuk memilih kaedah yang sesuai untuk menyelesaikan mengikut keperluan perniagaan tertentu.
Atas ialah kandungan terperinci ralat golang: 'tidak boleh menetapkan kepada pembolehubah julat...' Bagaimana untuk menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!