在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中文網其他相關文章!