golang map 是按值查找还是按引用查找?
Posted
技术标签:
【中文标题】golang map 是按值查找还是按引用查找?【英文标题】:Is golang map lookup by value or by reference? 【发布时间】:2016-12-08 08:36:24 【问题描述】:当我从 Go 中的映射中检索结构时,我会得到值的副本吗?还是我得到地图中的实际值?
例如,假设我有一个从字符串到结构的映射:
type quality struct
goodness int
crunchiness int
cookies := make(map[string]quality)
cookies["nutrageous"] = qualitygoodness: 3, crunchiness: 10
我想修改一个条目。
我可以指望返回的值与地图中的值相同吗?
c := cookies["nutrageous"]
c.goodness += 5
或者我是否也必须返回并修改地图中的内容?
c := cookies["nutrageous"]
c.goodness += 5
cookies["nutrageous"] = c
【问题讨论】:
因为在 Go 中 没有 没有引用,答案显然是:按值。 我很好重新打开这个,因为你已经接受了一个答案(认为关闭会阻止持续的反对票)。但是,答案的根本原因是相同的,因此很高兴了解为什么当地图中的值一开始无法寻址时,您的示例可能无法工作。 所以我和你的答案是一样的,即使这些问题源于同样的潜在信息缺乏。但是关于 SO 的知识需要按问题进行索引,这些是不同的索引 - 即使两个问题指向相同的答案,它们仍然会为网站增加价值。 【参考方案1】:索引地图会返回地图值的副本。如果映射值是一个结构,那么对返回的结构值的修改不会改变映射中的结构值。您必须将修改后的值分配回地图。
如果值是指向结构的指针,则可以通过存储在映射中的指针访问对结构的修改。
【讨论】:
【参考方案2】:就像 Cerise 的回答一样,这是不可能的。 相反,您可以将指针作为值保存在映射中。
Dereferencing a map index in Golang
【讨论】:
以上是关于golang map 是按值查找还是按引用查找?的主要内容,如果未能解决你的问题,请参考以下文章