2016-10-25 2 views
3

Я новичок в Go и хочу создать и инициализировать массив struct в go. Мой код как этотArray of struct in Go language

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) 
} 

я получаю следующее сообщение об ошибке:

panic: runtime error: index out of range 

goroutine 1 [running]: 
panic(0xa6800, 0xc42000a080) 

Пожалуйста, помогите. ТИА :)

+0

Возможно, вы могли бы отправиться на экскурсию по другому? – Volker

ответ

6

Вы инициализация города как срез узлов с одним элементом (пустой узел).

Вы можете инициализировать его фиксированный размер с 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) 
} 

Я определенно рекомендую читать this article, если вы немного шаткими о том, как работают срезы.

+0

Yup. Спасибо чувак! – Parag

0

Это работало для меня

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) 
}