使用反射从新实例 (reflect.New) 调用方法
Posted
技术标签:
【中文标题】使用反射从新实例 (reflect.New) 调用方法【英文标题】:invoke a method from a new instance (reflect.New) with reflection 【发布时间】:2021-11-30 13:43:21 【问题描述】:我想在 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)
【问题讨论】:
【参考方案1】:reflect.New
的工作方式与new
函数完全相同,因为它返回一个已分配的指向给定类型的指针。这意味着您希望将结构而不是指向结构的指针传递给reflect.TypeOf
。
t := reflect.TypeOf(foo)
fooV := reflect.New(t)
既然你现在有一个正确类型的指针值,你可以直接调用方法:
fooV.MethodByName("Bar").Call(nil)
https://play.golang.org/p/Aehrls4A8xB
【讨论】:
以上是关于使用反射从新实例 (reflect.New) 调用方法的主要内容,如果未能解决你的问题,请参考以下文章
GoLanggolang 如何像Java 一样通过类名反射对象?