golang - 如何在结构中初始化地图字段?

我对初始化包含地图的结构的最佳方法感到困惑。运行此代码会产生panic: runtime error: assignment to entry in nil map:


package main


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)

  g.connections[v2] = append(g.connections[v2], v1)

}

一个想法是创建一个构造函数,如本答案所示。


另一个想法是使用一种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)

}

还有其他选择吗?只是想看看是否有一种普遍接受的方法来做到这一点。


慕后森
浏览 201回答 3
3回答

吃鸡游戏

代码(尤其是完全在您控制之下的代码)假设您正确初始化了数据结构是很常见的。在这种情况下通常使用结构文字g := &Graph{    connections: make(map[Vertex][]Vertex),}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go