一尘不染

在Go中通过名称调用结构及其方法?

go

我在MethodByName()这里找到了一个函数调用http://golang.org/pkg/reflect/#Value.MethodByName,但这并不是我想要的!(也许是因为我不知道如何使用它……我找不到任何示例)。我想要的是:

type MyStruct struct {
//some feilds here
} 
func (p *MyStruct) MyMethod { 
    println("My statement."); 
}

CallFunc("MyStruct", "MyMethod"); 
//print out "My statement."

所以我想,首先我需要类似的东西StructByName(),然后将其用于MethodByName(),对!!


阅读 263

收藏
2020-07-02

共1个答案

一尘不染

要在对象上调用方法,请先使用reflect.ValueOf。然后按名称查找方法,然后最后调用找到的方法。例如:

package main

import "fmt"
import "reflect"

type T struct {}

func (t *T) Foo() {
    fmt.Println("foo")
}

func main() {
    var t T
    reflect.ValueOf(&t).MethodByName("Foo").Call([]reflect.Value{})
}
2020-07-02