web-dev-qa-db-fra.com

Tableau de struct en langue Go

Je suis nouveau sur Go et je veux créer et initialiser un tableau struct en cours. Mon code est comme ça

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

Je reçois l'erreur suivante:

panic: runtime error: index out of range

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

S'il vous plaît aider. TIA :)

7
Parag

Vous initialisez des villes en tant que tranche de nœuds avec un élément (un nœud vide).

Vous pouvez l'initialiser à une taille fixe avec cities := make([]node,47) ou l'initialiser à une tranche vide et append à celle-ci:

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

Je recommanderais certainement de lire cet article si vous êtes un peu fragile sur le fonctionnement des tranches.

18
captncraig

Cela a fonctionné pour moi

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