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

时间:2016-08-02 20:21:19

标签: dictionary go pass-by-reference pass-by-value

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

2 个答案:

答案 0 :(得分:8)

为地图编制索引会返回地图值的副本。如果map值是结构,则对返回的struct值的修改不会更改map中的struct值。您需要将修改后的值分配回地图。

如果值是指向结构的指针,则可以通过地图访问对结构的修改。

答案 1 :(得分:0)

就像Cerise的回答一样 - 这是不可能的。 相反,您可以将指针作为值保存在地图中。

Dereferencing a map index in Golang