我遇到过这种情况,我试图将值赋给结构中的结构。没有编译器错误,但运行它时会出现混乱。 Go有不同的方法来处理这种数据结构吗?
package main
import (
"fmt"
)
type Label struct {
ID int
Labels []struct {
ID int
Name string
}
}
func main() {
l := Label{}
l.ID = 100
l.Labels[0].ID = 200
l.Labels[0].Name = "me"
fmt.Println(l.ID)
fmt.Println(l.Labels[0].ID)
fmt.Println(l.Labels[0].Name)
}
https://play.golang.org/p/IiuXpaDvF1W
提前致谢。
答案 0 :(得分:1)
切片的默认值为nil
,因此它没有元素,并且您无法分配到索引0,因为它尚不存在。
您可以使用append将新元素添加到该切片:
l.Labels = append(l.Labels, struct{
ID int
Name string
}{
ID: 200,
Name: "me",
})
https://play.golang.org/p/uAWdQdh0Ov7
此外,您在此处使用内联/匿名结构意味着您需要在append
时重新声明该类型。考虑添加另一个声明的类型:
type SubLabel struct {
ID int
Name string
}
type Label struct {
ID int
Labels []SubLabel
}
// ...
l.Labels = append(l.Labels, SubLabel{
ID: 200,
Name: "me",
})