Rumah > pembangunan bahagian belakang > Golang > Mengapakah Menggunakan Kata Kunci Julat Go Gagal Mengubah Suai Elemen Tatasusunan, dan Bagaimanakah Indeks Tatasusunan Boleh Memberikan Penyelesaian?

Mengapakah Menggunakan Kata Kunci Julat Go Gagal Mengubah Suai Elemen Tatasusunan, dan Bagaimanakah Indeks Tatasusunan Boleh Memberikan Penyelesaian?

Barbara Streisand
Lepaskan: 2024-12-17 11:23:25
asal
262 orang telah melayarinya

Why Does Using Go's Range Keyword Fail to Modify Array Elements, and How Can Array Indices Provide a Solution?

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

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

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan