在 Go 中获取映射值的地址
与切片元素不同,为什么 Go 阻止获取映射值的地址?这个主题之前已经提出过,但接受的答案(指出地图值不受切片等数组支持)似乎还不够。
协调常见假设
认为数字映射值可以就地修改并且映射具有固定的内存位置(如切片),这是一种误解。对数字映射值使用像 or = 这样的复合运算符可以有效地执行修改结果的分配,而不是直接修改映射值。
此外,尽管映射由存储桶结构支持,但这些存储桶是动态的并且可以随着地图条目的修改而重新组织。因此,Map 值不像切片元素那样有固定的内存位置。
结论
Go 中无法获取 Map 值的地址源于地图桶。随着映射条目的创建、更新或删除,存储桶结构会不断进行重组。这种动态行为阻止了映射值的固定内存位置,使得允许地址获取和后续修改变得不切实际。相反,Go 提供了通过检索、修改然后将更新后的值分配回映射来间接修改映射值的方法。
以上是为什么我们不能在 Go 中获取映射值的地址?的详细内容。更多信息请关注PHP中文网其他相关文章!