为什么 Go 中映射值的地址不可用?
人们普遍猜测 Go 中的映射是由不可变结构支持的,防止检索对映射值的引用。然而,这不是根本原因。
桶的作用
Go 中的 Map 使用桶内存结构。哈希函数将每个键定向到主存储桶。随后,键和值存储在主存储桶或溢出存储桶中。随着地图中添加、更改或删除元素,地图存储桶会不断重组。
中心问题
无法访问地址的症结所在映射的价值在于映射条目的瞬态性。与固定内存位置不同,映射条目是游牧的,动态适应映射操作。此特性排除了为映射值引用明确内存位置的可能性。
与切片对比
与映射和切片在以下方面具有可比性的断言相反内存结构、切片的操作不同。切片由存储其元素的专用数组支持。因此,可以通过此底层数组直接访问切片,从而允许就地修改。
后果
无法访问映射值的地址需要间接修改。要更改映射值,必须提取该值,对其进行操作,然后将其恢复到映射中。这个额外的步骤是地图由于其动态特性而固有的限制。
以上是为什么在 Go 中无法获取 Map 值的地址?的详细内容。更多信息请关注PHP中文网其他相关文章!