当我从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
答案 0 :(得分:8)
为地图编制索引会返回地图值的副本。如果map值是结构,则对返回的struct值的修改不会更改map中的struct值。您需要将修改后的值分配回地图。
如果值是指向结构的指针,则可以通过地图访问对结构的修改。
答案 1 :(得分:0)
就像Cerise的回答一样 - 这是不可能的。 相反,您可以将指针作为值保存在地图中。