Go 在struct方法中使用reflect调用struct方法

Go 在struct方法中使用reflect调用struct方法,go,reflection,Go,Reflection,如何在结构方法内部使用reflect调用结构的方法?e、 g: 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() {

如何在结构方法内部使用reflect调用结构的方法?e、 g:

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"
}
即使存在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.Call(nil))
}

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

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

func getDynamicValue() string {
    return "Fake"
}
问题在于:

&t被传递给ValueOf,而不是t 不导出假方法 以下是一个工作示例:

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


您只能对导出的成员进行反思。@Adrian如果我改为Fake,仍然不起作用。t已经是指针,&t是**t没有方法Fake或Fake或任何方法。