wake-up-neo.net

Array von struct in Go-Sprache

Ich bin neu bei Go und möchte ein Strukturarray in go erstellen und initialisieren. Mein Code ist so

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

Ich erhalte folgende Fehlermeldung:

panic: runtime error: index out of range

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

Bitte helfen TIA :)

7
Parag

Sie initialisieren Städte als ein Segment von Knoten mit einem Element (einem leeren Knoten).

Sie können es mit cities := make([]node,47) auf eine feste Größe initialisieren, oder Sie können es auf ein leeres Segment und append darauf initialisieren:

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

Ich würde auf jeden Fall empfehlen, diesen Artikel zu lesen, wenn Sie ein bisschen verwackelt sind, wie Slices funktionieren.

18
captncraig

Das hat bei mir funktioniert

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