取得介面內值的位址
在 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中文網其他相關文章!