Go 中的映射值:揭开间接修改背后的神秘面纱
使用将整数键映射到结构体的 Go 映射时,这是一种奇怪的行为出现:不能直接修改map值中的字段。相反,您必须读取该结构,修改它,然后将其重写回映射。
为什么需要这种解决方法?修改映射或切片中的结构体字段是否会产生不可预见的隐藏成本?
答案在于 Go 处理值类型的方式。当您在映射中按值存储结构体时,您实际上是在创建该结构体的副本。对此副本进行的任何修改都不会影响存储在映射中的原始结构。
要纠正此问题,您可以在映射中存储指向该结构的指针。这允许您直接修改指针引用的结构。在代码中,这将转化为使用map[whatever]*struct 而不是map[whatever]struct。
使用值类型或指针类型的选择取决于应用程序的具体要求。然而,了解值类型和指针类型的细微差别很重要,以避免在 Go 中使用映射、切片和其他数据结构时出现意外行为。
以上是为什么Go Maps中不能直接修改struct字段?的详细内容。更多信息请关注PHP中文网其他相关文章!