首页  >  文章  >  后端开发  >  为什么我不能分配给 Go Map 中的结构体字段?

为什么我不能分配给 Go Map 中的结构体字段?

DDD
DDD原创
2024-11-27 13:13:13242浏览

Why Can't I Assign to a Struct Field in a Go Map?

“无法在映射中分配对”:可寻址性解释

在 Go 中,当尝试修改存储在映射中的结构体的字段时,可能会出现错误“无法分配给它”。这个问题源于可寻址性的概念,它限制了对映射中的值的直接赋值。

pair 结构在映射中保存两个 float64 值,例如字典[“xxoo”].b。为字典["xxoo"].b 分配新值失败,因为映射值不可寻址。

Go 映射旨在高效存储和检索数据。为了保持这种效率,映射值是不可寻址的,这意味着内存管理允许它们根据需要移动。如果没有可寻址性,则无法使用选择器 (.) 运算符访问结构体字段进行直接赋值。

要避免此限制,请使用指针类型作为映射值。例如,通过定义 map[string]*pair,指针间接寻址使结构体可寻址。这允许直接分配,如以下代码所示:

dict := make(map[string]*pair)
dict["xxoo"] = &pair{5.0, 2.0}
dict["xxoo"].b = 5.0

或者,如果使用具有值类型的映射,则分配现有值的副本或完全提供新值:

p := dict["xxoo"]
p.b = 5.0
dict["xxoo"] = p

// or
dict["xxoo"] = pair{5.0, 5.0}

通过了解可寻址性并实施适当的解决方案,您可以有效地操作存储在 Go 映射中的结构。

以上是为什么我不能分配给 Go Map 中的结构体字段?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn