Go语言中的结构数组

Par*_*rag 9 arrays struct initialization go

我是Go的新手,想要在go中创建和初始化struct数组.我的代码是这样的

type node struct {
name string
children map[string]int
}

cities:= []node{node{}}
for i := 0; i<47 ;i++ {
    cities[i].name=strconv.Itoa(i)
    cities[i].children=make(map[string]int)
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

panic: runtime error: index out of range

goroutine 1 [running]:
panic(0xa6800, 0xc42000a080)
Run Code Online (Sandbox Code Playgroud)

请帮忙.TIA :)

cap*_*aig 24

您正在将城市初始化为具有一个元素(空节点)的节点片段.

您可以使用它将其初始化为固定大小cities := make([]node,47),或者可以将其初始化为空切片,并将append其初始化为:

cities := []node{}
for i := 0; i<47 ;i++ {
  n := node{name: strconv.Itoa(i), children: map[string]int{}}
  cities = append(cities,n)
}
Run Code Online (Sandbox Code Playgroud)

如果你对切片的工作方式有点不稳定,我肯定会推荐阅读这篇文章.


Par*_*rag 6

这对我有用

type node struct {
    name string
    children map[string]int
}

cities:=[]*node{}
city:=new(node)
city.name=strconv.Itoa(0)
city.children=make(map[string]int)
cities=append(cities,city)
for i := 1; i<47 ;i++ {
    city=new(node)
    city.name=strconv.Itoa(i)
    city.children=make(map[string]int)
    cities=append(cities,city)
}
Run Code Online (Sandbox Code Playgroud)