首頁 > 後端開發 > Golang > 如何修改 Go Map 值中的結構體欄位?

如何修改 Go Map 值中的結構體欄位?

DDD
發布: 2024-11-28 19:51:11
原創
926 人瀏覽過

How to Modify Struct Fields Within Go Map Values?

尋址映射值

在Go 中,嘗試直接修改映射值中的結構體字段,如下例所示,將會導致編譯錯誤:

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
}
登入後複製

遇到此錯誤訊息是因為映射值無法定址。可尋址性是Go中的一個基本概念,它指的是定位變數記憶體位址的能力。無法間接修改不可尋址值,因為嘗試存取不可尋址值的結構體欄位會導致編譯錯誤。

要解決此問題,主要有兩種方法:

使用指標值

一種方法是使用指標值作為映射值。這種間接定址使得值可定址,從而允許欄位修改。以下是一個範例:

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
}
登入後複製

值複製或取代

或者,您可以透過複製值或完全取代它來處理不可尋址的值。以下是兩個範例:

// Value Copying
dictionary["xxoo"] = pair{5.0, 5.0}
登入後複製
// Value Replacement
p := dictionary["xxoo"]
p.b = 5.0
dictionary["xxoo"] = p
登入後複製

這兩種方法都允許您修改映射中的「pair」結構。

以上是如何修改 Go Map 值中的結構體欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板