為什麼具有非指標值的介面在Go 中不可尋址
Golang 的介面文件表明介面中儲存的值是不可尋址址的,類似映射到地圖中的元素。這就提出了為什麼介面值是不可尋址的問題。
tl;dr:維護類型完整性
為了保持類型完整性,非指標值儲存在介面中是不可尋址的。考慮介面中指向 A 類型值的指標 (*A)。如果隨後在介面中儲存了不同的類型(例如 B),則指向 A 的指標將變得無效,從而危及類型安全。
解決意義
如果介面值是可尋址的,這會導致意想不到的效果。例如,對於介面 I、實作 I 的兩種類型 A 和 B,以及 I 實例中的儲存 A,取得儲存值的位址將允許透過該位址修改原始值。但是,當 I 中儲存另一個值 B 時,指向原始 A 值的指標將變得無效。
指針警告
而非指針介面值則不然可尋址,可以使用明確轉換來獲得指向該值副本的指針,例如var a2 A = i .(A) 後面接著var aPtr *A = &a2.
結論
介面值的不可尋址性透過在介面中儲存不同類型的值時防止無效的指標參考來確保類型完整性。
以上是為什麼 Go 介面中的非指標值不可尋址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!