Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengubah Suai Medan Struktur Dalam Nilai Peta Go?

Bagaimana untuk Mengubah Suai Medan Struktur Dalam Nilai Peta Go?

DDD
DDDasal
2024-11-28 19:51:11908semak imbas

How to Modify Struct Fields Within Go Map Values?

Mengalamatkan Nilai Peta

Dalam Go, cuba mengubah suai medan struct terus dalam nilai peta, seperti yang ditunjukkan dalam contoh berikut, akan mengakibatkan ralat penyusunan:

import (
    "fmt"
)

type pair struct {
    a float64
    b float64
}

func main() {
    // Create a map where values are of the "pair" type.
    dictionary := make(map[string]pair)

    // Add an element to the map.
    dictionary["xxoo"] = pair{5.0, 2.0}

    fmt.Println(dictionary["xxoo"]) // Output: {5 2}

    // Attempt to modify a field within the map value.
    dictionary["xxoo"].b = 5.0 // Error: cannot assign to dictionary["xxoo"].b
}

Mesej ralat ini ditemui kerana nilai peta tidak boleh ditangani. Kebolehalamatan ialah konsep asas dalam Go, dan ia merujuk kepada keupayaan untuk mencari alamat memori pembolehubah. Nilai tidak boleh alamat tidak boleh diubah suai secara tidak langsung, kerana percubaan untuk mengakses medan struktur nilai tidak boleh alamat mengakibatkan ralat penyusunan.

Untuk menyelesaikan isu ini, terdapat dua pendekatan utama:

Menggunakan Nilai Penunjuk

Satu pendekatan ialah menggunakan nilai penunjuk sebagai nilai peta. Arahan ini menjadikan nilai boleh ditangani, membenarkan pengubahsuaian medan. Berikut ialah contoh:

import (
    "fmt"
)

type pair struct {
    a float64
    b float64
}

func main() {
    // Create a map where values are pointers to "pair" structs.
    dictionary := make(map[string]*pair)

    // Add an element to the map.
    dictionary["xxoo"] = &pair{5.0, 2.0}

    fmt.Println(dictionary["xxoo"]) // Output: &{5 2}

    // Modify a field within the pointed-to struct.
    dictionary["xxoo"].b = 5.0

    fmt.Println(dictionary["xxoo"].b) // Output: 5
}

Penyalinan atau Penggantian Nilai

Sebagai alternatif, anda boleh menggunakan nilai yang tidak boleh ditangani dengan menyalin nilai atau menggantikannya sepenuhnya. Berikut ialah dua contoh:

// Value Copying
dictionary["xxoo"] = pair{5.0, 5.0}
// Value Replacement
p := dictionary["xxoo"]
p.b = 5.0
dictionary["xxoo"] = p

Kedua-dua pendekatan ini membolehkan anda mengubah suai struct "pasangan" dalam peta.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Suai Medan Struktur Dalam Nilai Peta Go?. 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