問題
我們如何改變介面的指標型別和值由介面定義的變數反射?
答案
在Go中,一切都是按值傳遞的,包括介面。分配介面值時,會建立一個副本,從而限制了修改的可能性。
要修改儲存在介面變數中的值,必須使用其位址。透過reflect.ValueOf(&varName).Elem()存取變數的位址,我們可以在其中設定一個新的指標值。
範例
var a fmt.Stringer // Interface variable a = &Greeter{"John"} v := reflect.ValueOf(&a).Elem() // Access variable's address v.Set(reflect.ValueOf(&Greeter2{"Jack"})) // Set new pointer value fmt.Println(a.String()) // Hello2, My name is Jack (Greeter2.String() called)
重點
限制
以上是如何在 Go 中使用反射來變更介面變數的指標類型和值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!