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

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

当我从 Go 中的映射中检索结构时,是否会得到该值的副本?还是获取 map 中的实际值?

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

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

我想修改一个条目。

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

c := cookies["nutrageous"]
c.goodness += 5

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

c := cookies["nutrageous"]
c.goodness += 5
cookies["nutrageous"] = c

最佳答案

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

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

关于dictionary - golang map 是按值查找还是按引用查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38729760/

相关文章:

go - 更新传递给函数的结构中的 slice

go - 如何锁定 map 并修复数据竞争

c++-cli - 在 C++/CLI 中通过引用传递参数,因此重新分配会影响调用者

java - 字典:硬编码与外部文件

python - 将 defaultdict 传递给 df

go - 获取 cloud.google.com/go/datastore 会为 golang.org/x/lint 提供格式错误的记录数据

php - PHP 数组递归不应该抛出错误吗?

C通过引用或按值将结构数组传递给函数

java - 关于Hashmap放入一万个对象时的性能

python 代码在一个文件上有效,但在其他文件上失败