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