使用反射从新实例 (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)

https://play.golang.org/p/Aehrls4A8xB