首頁 >後端開發 >Golang >如何正確初始化 Go 結構中的 Map 欄位?

如何正確初始化 Go 結構中的 Map 欄位?

Susan Sarandon
Susan Sarandon原創
2024-12-02 05:36:10347瀏覽

How to Properly Initialize a Map Field in a Go Struct?

在Go 中初始化Map 類型的結構體欄位

使用包含Map 欄位的Go 結構體時,在先前初始化Map 至關重要使用它。當嘗試在結構初始化期間初始化映射時,會出現一個常見的混亂來源,如下面的程式碼片段所示:

type Vertex struct {
   label string
} 

type Graph struct {
  connections map[Vertex][]Vertex
} 

func main() {
  v1 := Vertex{"v1"}
  v2 := Vertex{"v2"}

  g := new(Graph)
  g.connections[v1] = append(g.coonections[v1], v2) // panic: runtime error: assignment to entry in nil map
  g.connections[v2] = append(g.connections[v2], v1)
}

此程式碼會觸發執行時期錯誤,因為g.connections 在結構實例化時為nil,並且禁止嘗試指派給nil 映射。

有幾個方法可以解決這個問題這個:

1。建立建構函式方法:

一種解決方案是使用建構函式方法,該方法負責在結構建立期間初始化映射:

func NewGraph() *Graph {
    g := &Graph{}
    g.connections = make(map[Vertex][]Vertex)
    return g
}

2.新增連接方法:

另一種方法涉及使用「add_connection」方法來檢查映射是否為零,並在執行所需操作之前根據需要對其進行初始化:

func (g *Graph) add_connection(v1, v2 Vertex) {
  if g.connections == nil {
    g.connections = make(map[Vertex][]Vertex)
  }
  g.connections[v1] = append(g.connections[v1], v2)
  g.connections[v2] = append(g.connections[v2], v1)
}

3.使用非零欄位值:

或者,您可以在結構初始化期間為映射欄位分配非零值:

type Graph struct {
  connections map[Vertex][]Vertex = make(map[Vertex][]Vertex)
}

4。使用反射:

對於更複雜的情況,可以使用反射在運行時存取和修改地圖欄位。然而,這種方法通常較不慣用,應謹慎使用。

方法的選擇取決於應用程式的特定要求和偏好。建構函式和 add_connection 方法很常用,提供了一種清晰直接的方法來初始化和操作結構內的映射。

以上是如何正確初始化 Go 結構中的 Map 欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn