golang map 是按值查找还是按引用查找?

Is golang map lookup by value or by reference?

当我从 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

索引地图 returns 地图值的副本。如果映射值是结构,则对返回的结构值的修改不会更改映射中的结构值。您必须将修改后的值重新分配给地图。

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

就像 Cerise 的回答一样——这是不可能的。 相反,您可以将指针作为映射中的值。

Dereferencing a map index in Golang