有人知道为什么这不起作用吗?
我已经绞尽脑汁了大约4个小时。我无法使其正常工作。
在我看来,我试图做两次相同的事情。我正在制作结构中一个字段的映射,然后又在另一个结构中的另一个字段上进行绘制。
如果我尝试制作地图。它失败并显示:“无法分配给结构字段。Bet.Events [“ one”]。地图中的运行程序”。
因此,如果我删除品牌,然后尝试分配它,则会得到:“分配给nil map中的条目”
https://play.golang.org/p/kRcXoyO-8FN
var Bet BetStruct
type BetStruct struct {
Events map[string]Event
}
type Event struct {
Name string
Runners map[int]Runner
}
type Runner struct {
Name string
}
func main(){
// == THIS WORKS FINE ==
Bet.Events = make(map[string]Event)
Bet.Events["one"] = Event{
Name: "first",
}
Bet.Events["two"] = Event{
Name: "second",
}
// == THIS DOES NOT WORK ==
Bet.Events["one"].Runners = make(map[int]Runner)
Bet.Events["one"].Runners[0] = Runner{
Name: "Jeff",
}
}
答案 0 :(得分:2)
map的默认值为0110
(在make(map)之前或没有make(map)之前)
您在以下代码中为010
设置了默认值:
nil
因此,Runners
的定义不明确,并设置为Bet.Events["one"] = Event{
Name: "first",
}
。
结构是可变的期望映射元素。
您无法重新初始化地图元素Runners
,因为它不可寻址。
您需要这样做:
nil
感谢@icza标记文本中的错误