为什么我们必须先读取结构,修改它,然后将其写回地图?在修改其他数据结构(如地图或切片)中的结构字段时,我是否遗漏了某种隐含的隐藏成本?
编辑: 我意识到我可以使用指针,但为什么这是Go不允许的?
type dummy struct {
a int
}
x := make(map[int]dummy)
x[1] = dummy{a:1}
x[1].a = 2
答案 0 :(得分:13)
您正在按值存储结构,这意味着在地图中加入该结构会为您提供值的副本。这就是为什么当你修改它时,地图中的结构保持不变,直到你用新副本覆盖它。
正如RickyA在注释中指出的那样,您可以将指针存储到结构中,这样就可以直接修改存储的struct指针引用的结构。
即。 map[whatever]*struct
代替map[whatever]struct