Pertanyaan Larik struct dalam bahasa Go


Saya baru untuk Go dan ingin membuat dan menginisialisasi susunan struct di go. Kode saya seperti ini

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

Saya mendapatkan kesalahan berikut:

panic: runtime error: index out of range

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

Tolong bantu. TIA :)


5
2017-10-25 01:12


asal


Jawaban:


Anda menginisialisasi kota sebagai bagian dari node dengan satu elemen (node ​​kosong).

Anda dapat menginisialisasi ke ukuran tetap dengan cities := make([]node,47), atau Anda dapat menginisialisasi ke irisan kosong, dan append untuk itu:

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

Saya pasti merekomendasikan membaca artikel ini jika Anda sedikit goyah tentang cara kerja irisan.


11
2017-10-25 01:58



Ini berhasil bagi saya

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

0
2017-10-25 01:32