Rumah > pembangunan bahagian belakang > Golang > ralat golang: 'tidak boleh menetapkan kepada pembolehubah julat...' Bagaimana untuk menyelesaikannya?

ralat golang: 'tidak boleh menetapkan kepada pembolehubah julat...' Bagaimana untuk menyelesaikannya?

王林
Lepaskan: 2023-06-24 13:43:40
asal
833 orang telah melayarinya

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan