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

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

Linda Hamilton
發布: 2024-10-30 00:20:29
原創
586 人瀏覽過

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

在介面內尋址值

為了理解為什麼取得儲存在介面中的值的位址是不可行的,這一點至關重要深入研究介面變數的本質。本質上,介面值由兩個部分組成:

  • 類型描述符:這部分指定底層值的類型。
  • 值/指標: 根據值的大小,它要麼直接駐留在變數中,要麼存在指向其儲存的指標。

需要注意的兩個關鍵面向:

  1. 包含的值屬於介面變數。
  2. 值儲存可以重複使用以供後續賦值。

考慮以下程式碼片段:

<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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板