為什麼 Go 中映射值的位址不可用?
人們普遍猜測 Go 中的映射是由不可變結構支援的,防止檢索對映射值的引用。然而,這不是根本原因。
桶的作用
Go 中的 Map 使用桶記憶體結構。哈希函數將每個鍵定向到主儲存桶。隨後,鍵和值儲存在主儲存桶或溢出儲存桶中。隨著地圖中新增、變更或刪除元素,地圖儲存桶會不斷重組。
中心問題
無法存取位址的癥結所在對應的價值在於映射條目的瞬態性。與固定記憶體位置不同,映射條目是遊牧的,動態適應映射操作。此特性排除了為映射值引用明確記憶體位置的可能性。
與切片對比
與映射和切片在以下方面具有可比性的斷言相反內存結構、切片的操作不同。切片由儲存其元素的專用數組支援。因此,可以透過此底層數組直接存取切片,從而允許就地修改。
後果
無法存取映射值的位址需要間接修改。若要變更映射值,必須提取該值,對其進行操作,然後將其還原為映射中。這個額外的步驟是地圖由於其動態特性而固有的限制。
以上是為什麼在 Go 中無法取得 Map 值的位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!