问题
我们如何改变接口的指针类型和值由接口定义的变量反射?
答案
在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中文网其他相关文章!