首頁 > 後端開發 > Golang > 主體

你能在 Go 中取得介面內的值的位址嗎?

Barbara Streisand
發布: 2024-10-31 02:53:31
原創
999 人瀏覽過

 Can You Take the Address of a Value Inside an Interface in Go?

取得介面內值的位址

在 Go 程式語言的上下文中,介面可作為契約,定義集合類型必須實作的方法。當一個值被指派給一個介面時,它被包裝在一個介面值中。然而,介面值本身並不會儲存實際值,而是保存對它的參考。

因此,嘗試使用& 運算子取得介面內值的位址將導致錯誤,如下所示在下面的程式碼片段中:

<code class="go">import "container/list"

type retry struct{}

var el = list.Element{Value: retry{}}

p := &el.Value.(retry) // Compilation error: cannot take the address of el.Value.(retry)</code>
登入後複製

這個錯誤源自於這樣一個事實:介面內部的值歸介面值本身所有,當為介面指派新值時,其儲存可能會被重複使用。修改獲取位址處的值會直接影響介面值,這是不可取的,並且可能會導致意外行為。

為了解決這種情況,可以使用替代方法:

儲存指標而不是值:
可以儲存指向這些結構的指針,而不是直接在介面中儲存結構值。這可以確保即使介面值發生變化,指標仍然有效。

使用元素參考:
另一個選項是將 *list.Element 值作為所包含結構的參考傳遞。這有效地提供了對結構體值的間接訪問,而不違反 Go 的類型安全。

以上是你能在 Go 中取得介面內的值的位址嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!