使用反射从新实例 (reflect.New) 调用方法
invoke a method from a new instance (reflect.New) with reflection
我想使用反射在 Go 中实例化一个对象并在其上调用一个方法。但是,我不知道该怎么做。我已经尝试了一些,但它不起作用。
type foo struct {
name string
}
func (f *foo) Bar() {
f.name = "baz"
fmt.Println("hi " + f.name)
}
func main() {
t := reflect.TypeOf(&foo{})
fooElement := reflect.New(t).Elem()
fooElement.MethodByName("Bar").Call([]reflect.Value{})
}
reflect.New
的工作方式与 new
函数完全相同,因为它 returns 分配给给定类型的指针。这意味着您要将结构而不是指向结构的指针传递给 reflect.TypeOf
.
t := reflect.TypeOf(foo{})
fooV := reflect.New(t)
既然你现在有一个正确类型的指针值,你可以直接调用方法:
fooV.MethodByName("Bar").Call(nil)
我想使用反射在 Go 中实例化一个对象并在其上调用一个方法。但是,我不知道该怎么做。我已经尝试了一些,但它不起作用。
type foo struct {
name string
}
func (f *foo) Bar() {
f.name = "baz"
fmt.Println("hi " + f.name)
}
func main() {
t := reflect.TypeOf(&foo{})
fooElement := reflect.New(t).Elem()
fooElement.MethodByName("Bar").Call([]reflect.Value{})
}
reflect.New
的工作方式与 new
函数完全相同,因为它 returns 分配给给定类型的指针。这意味着您要将结构而不是指向结构的指针传递给 reflect.TypeOf
.
t := reflect.TypeOf(foo{})
fooV := reflect.New(t)
既然你现在有一个正确类型的指针值,你可以直接调用方法:
fooV.MethodByName("Bar").Call(nil)