在 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中文网其他相关文章!