在 Go 中使用介面時,必須了解一切都是按值傳遞的。接口也不例外。因此,當您指派介面值時,將建立該值的副本,包括基礎(值;類型)對。這意味著對副本所做的任何修改都不會影響原始變數。
要更改介面變數的指標類型和值,必須將變數的位址傳遞給反射包。這是因為反射對值進行操作,並且傳遞地址允許您修改實際變數而不是副本。
這是示範此方法的程式碼的修改版本:
在此程式碼中,我們首先建立一個介面變數「a」並使用 Greeter 結構對其進行初始化。然後,我們使用反射包來取得指向「a」的指標的值,並將其設定為指向新的 Greeter2 結構。最後,我們在反射操作之後和直接將 'a' 設定為新值後列印 'a' 的更新值。
程式的輸出如下:
這表示我們已經成功使用反射來變更了介面變數「a」的指標類型和值。請記住,此技術僅在修改指向的值而不是指標本身時有效,因為只有 *Greeter2 實作了 fmt.Stringer,但沒有實作 Greeter。
以上是如何在 Go 中使用反射來變更介面變數的指標類型和值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!