首頁  >  文章  >  後端開發  >  為什麼無法取得 Go 介面中儲存的值的位址?

為什麼無法取得 Go 介面中儲存的值的位址?

Linda Hamilton
Linda Hamilton原創
2024-11-02 09:16:02883瀏覽

 Why Can't I Get the Address of a Value Stored in a Go Interface?

在介面內尋址值

嘗試取得儲存在介面中的值的位址通常會導致錯誤,例如「cannotel .Value 的地址。要理解這個限制,我們必須檢查介面變數的本質。

介面變數由兩部分組成:一部分描述所包含值的類型,另一部分直接儲存值或保存指向其值的指標貯存。儲存在介面中的值由介面變數本身擁有。此外,當介面被指派新值時,該值的儲存可以被重複使用。

例如:

<code class="go">var v interface{}
v = int(42)
p := GetPointerToInterfaceValue(&v) // a pointer to an integer holding 42
v = &SomeStruct{...}</code>

在這種情況下,用於保存整數的儲存是重新用於保存指針,將*p 處的值呈現為新指針的無效整數表示形式。這種行為很容易破壞類型系統,因此,Go 不提供直接的方法來取得介面值的位址(除了使用不安全的套件)。

如果您需要指向儲存在列表,請考慮儲存指向結構本身的指針,而不是直接儲存結構。或者,您可以使用 *list.Element 值作為所包含結構的參考。

以上是為什麼無法取得 Go 介面中儲存的值的位址?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn