Golang中的map查找是按值还是按引用进行的?

7
当我从Go中的map中检索结构体时,我得到的是值的副本还是实际存储在map中的值?
例如,假设我有一个从字符串到结构体的映射:
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

3
由于 Go 语言中没有引用,因此答案显然是:按值传递。 - Volker
1
既然您已经接受了答案(尽管关闭可能会防止继续的踩),我很乐意重新开放此问题。但是,答案的根本原因是相同的,因此了解为什么在地图中的值一开始就无法寻址是很重要的。 - JimB
所以我和你一样认为答案是相同的,甚至这些问题都源于同样的缺乏信息。但是在SO上,知识需要按照问题进行索引,而这些是不同的索引 - 即使它们指向相同的答案,拥有这两个问题仍然可以为该网站增加价值。 - Brendan W
2个回答

15

索引Map会返回Map值的复制品。如果Map值是一个结构体,则对返回的结构体值进行修改不会改变Map中的结构体值。您必须将修改后的值重新赋值给Map。

如果值是指向结构体的指针,则可以通过存储在Map中的指针访问对结构体的修改。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接