Rumah >pembangunan bahagian belakang >Golang >Mengapa Mengubah Suai Nilai Menggunakan Kata Kunci `julat` Go Gagal, dan Bagaimanakah Indeks Tatasusunan Boleh Memberikan Penyelesaian?

Mengapa Mengubah Suai Nilai Menggunakan Kata Kunci `julat` Go Gagal, dan Bagaimanakah Indeks Tatasusunan Boleh Memberikan Penyelesaian?

Susan Sarandon
Susan Sarandonasal
2024-12-27 18:27:15116semak imbas

Why Does Modifying Values Using Go's `range` Keyword Fail, and How Can Array Indices Provide a Solution?

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!

Kenyataan:
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