首页 > 解决方案 > 使用反射在struct方法内部调用struct的方法

问题描述

如何在结构方法中使用反射来调用结构的方法?例如:

package main

import "fmt"
import "reflect"

type T struct{}

func (t *T) New() {
    value := getDynamicValue()
    method := reflect.ValueOf(&t).MethodByName(value)
    fmt.Println(method)
}

func (t *T) fake() {
    fmt.Println("Fake!")
}

func main() {
    var t T
    t.New()
}

func getDynamicValue() string {
    return "fake"
}

<invalid reflect.Value>即使fake存在,以下代码也会打印。

提前致谢!:)

标签: goreflection

解决方案


问题是:

  • &t被传递给ValueOf而不是t
  • fake方法未导出

这是一个工作示例:

package main

import "fmt"
import "reflect"

type T struct{}

func (t *T) New() {
    value := getDynamicValue()
    method := reflect.ValueOf(t).MethodByName(value)
    fmt.Println(method)
}

func (t *T) Method() {
    fmt.Println("Hello world!")
}

func main() {
    var t T
    t.New()
}

func getDynamicValue() string {
    return "Method"
}

输出

0xec820

自己试试


推荐阅读