首頁 > 後端開發 > Golang > 如何在 Go 中使用反射來變更介面變數的指標類型和值?

如何在 Go 中使用反射來變更介面變數的指標類型和值?

Susan Sarandon
發布: 2024-11-20 01:34:03
原創
223 人瀏覽過

How do I change the pointer type and value of an interface variable using reflection in Go?

透過反射來變更介面下的指標類型和值

在 Go 中使用介面時,必須了解一切都是按值傳遞的。接口也不例外。因此,當您指派介面值時,將建立該值的副本,包括基礎(值;類型)對。這意味著對副本所做的任何修改都不會影響原始變數。

要更改介面變數的指標類型和值,必須將變數的位址傳遞給反射包。這是因為反射對值進行操作,並且傳遞地址允許您修改實際變數而不是副本。

這是示範此方法的程式碼的修改版本:

在此程式碼中,我們首先建立一個介面變數「a」並使用 Greeter 結構對其進行初始化。然後,我們使用反射包來取得指向「a」的指標的值,並將其設定為指向新的 Greeter2 結構。最後,我們在反射操作之後和直接將 'a' 設定為新值後列印 'a' 的更新值。

程式的輸出如下:

這表示我們已經成功使用反射來變更了介面變數「a」的指標類型和值。請記住,此技術僅在修改指向的值而不是指標本身時有效,因為只有 *Greeter2 實作了 fmt.Stringer,但沒有實作 Greeter。

以上是如何在 Go 中使用反射來變更介面變數的指標類型和值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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