在介面內尋址值
嘗試取得儲存在介面中的值的位址通常會導致錯誤,例如「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中文網其他相關文章!