【发布时间】:2016-12-08 08:36:24
【问题描述】:
当我从 Go 中的映射中检索结构时,我会得到值的副本吗?还是我得到地图中的实际值?
例如,假设我有一个从字符串到结构的映射:
type quality struct {
goodness int
crunchiness int
}
cookies := make(map[string]quality)
cookies["nutrageous"] = quality{goodness: 3, crunchiness: 10}
我想修改一个条目。
我可以指望返回的值与地图中的值相同吗?
c := cookies["nutrageous"]
c.goodness += 5
或者我是否也必须返回并修改地图中的内容?
c := cookies["nutrageous"]
c.goodness += 5
cookies["nutrageous"] = c
【问题讨论】:
-
因为在 Go 中 没有 没有引用,答案显然是:按值。
-
我很好重新打开这个,因为你已经接受了一个答案(认为关闭会阻止持续的反对票)。但是,答案的根本原因是相同的,因此很高兴了解为什么当地图中的值一开始无法寻址时,您的示例可能无法工作。
-
所以我和你的答案是一样的,即使这些问题源于同样的潜在信息缺乏。但是关于 SO 的知识需要按问题进行索引,这些是不同的索引 - 即使两个问题指向相同的答案,它们仍然会为网站增加价值。
标签: dictionary go pass-by-reference pass-by-value