此问题在此处已有答案:
How to update map values in Go(3个答案)
四年前关闭了。
有人知道为什么这行不通吗?
我已经绞尽脑汁想了4个小时了,我就是想不通。
在我看来,我试图做同样的事情两次,我在一个结构体中做一个字段的Map,然后我在另一个结构体中的另一个字段上再做一次。
如果我尝试制作Map,则会失败,并显示:“无法分配给结构字段。Bet.Events[“one”]。Map“”中的运行程序。
所以如果我去掉make,然后赋值,我得到:“nilMap中条目的赋值”
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",
}
}
1条答案
按热度按时间9gm1akwq1#
map的默认值为
nil
(在make(map)之前或不使用make(map))在以下代码中为
Runners
设置默认值:因此,
Runners
未明确定义,设置为nil
。除了map元素之外,结构是可变的。(来自下面的@icza注解:“结构是可修改的。存储在Map中的值是不可修改的,因为存储在Map中的值是不可寻址的。”)
无法重新初始化Map元素
Bet.Events["one"]
,因为不可寻址。您需要执行以下操作:
感谢@icza标记文本中的错误