Golang:我有一个结构图。为什么我不能直接修改struct值中的字段?

时间:2016-11-13 20:47:18

标签: go struct

为什么我们必须先读取结构,修改它,然后将其写回地图?在修改其他数据结构(如地图或切片)中的结构字段时,我是否遗漏了某种隐含的隐藏成本?

编辑: 我意识到我可以使用指针,但为什么这是Go不允许的?

type dummy struct {
    a int
}
x := make(map[int]dummy)
x[1] = dummy{a:1}
x[1].a = 2

1 个答案:

答案 0 :(得分:13)

您正在按值存储结构,这意味着在地图中加入该结构会为您提供值的副本。这就是为什么当你修改它时,地图中的结构保持不变,直到你用新副本覆盖它。

正如RickyA在注释中指出的那样,您可以将指针存储到结构中,这样就可以直接修改存储的struct指针引用的结构。

即。 map[whatever]*struct代替map[whatever]struct