【问题标题】:invoke a method from a new instance (reflect.New) with reflection使用反射从新实例 (reflect.New) 调用方法
【发布时间】: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{})
}

【问题讨论】:

    标签: go reflection reflect


    【解决方案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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-30
      • 1970-01-01
      相关资源
      最近更新 更多