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
Lepaskan: 2024-11-28 19:51:11
asal
911 orang telah melayarinya

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

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

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}
Salin selepas log masuk
// Value Replacement
p := dictionary["xxoo"]
p.b = 5.0
dictionary["xxoo"] = p
Salin selepas log masuk

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!

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