m:=make(map[string]map[string]int)
c:=make(map[string]int)
c["b"]=1
m["a"]=c
d:=make(map[string]int)
d["c"]=2
m["a"]=d
这是因为 b 和 c 都是 map[string]int
类型的数据,Golang 直接把 ["a"]
里的数据从 b 替换成了 c,而不会递归地添加 map 中缺失的数据。
要在 m 中保留 ["a"]["b"]
和 ["a"]["c"]
,需要一些额外的判断才行
if _,exist:=m["a"];exist{
m["a"]["c"]=2
}else{
c:=make(map[string]int)
c["c"]=2
m["a"]=c
}