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

Bre*_*dan 1 dictionary pass-by-reference pass-by-value go

当我从Go中的地图中检索结构时,是否会获得该值的副本?或者我获得地图中的实际值?

例如,假设我有一个从字符串到结构的映射:

type quality struct {
    goodness    int
    crunchiness int 
}
cookies := make(map[string]quality)
cookies["nutrageous"] = quality{goodness: 3, crunchiness: 10}
Run Code Online (Sandbox Code Playgroud)

我想修改一个条目.

我可以指望返回的值与地图中的值相同吗?

c := cookies["nutrageous"]
c.goodness += 5
Run Code Online (Sandbox Code Playgroud)

或者我还必须返回并修改地图中的内容?

c := cookies["nutrageous"]
c.goodness += 5
cookies["nutrageous"] = c
Run Code Online (Sandbox Code Playgroud)

Cer*_*món 9

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

如果值是指向结构的指针,则可以通过映射访问对结构的修改.