Kur*_*eek 3 reflection go go-reflect
我有一个库,其中有Client和MockClient结构,它们都实现相同的ClientInterface接口。我想编写单元测试来保持这些结构同步,以便它们不仅实现接口,而且具有MockClient所有的Client方法。为此,我想获取结构体方法的列表,以便在 中Client缺少其中一个方法时打印信息丰富的错误消息MockClient。
我尝试改编How to get the name of a function in Go? 对于这个简化的例子:
package main
import (
"fmt"
"reflect"
"runtime"
)
type Person struct {
Name string
}
func (person *Person) GetName() string {
return person.Name
}
func main() {
person := Person{Name: "John Doe"}
personValue := reflect.ValueOf(&person)
for i := 0; i < personValue.NumMethod(); i++ {
fmt.Println(runtime.FuncForPC(personValue.Method(i).Pointer()).Name())
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是这个脚本(在https://play.golang.org/p/HwvhEPfWI5I共享)打印GetName. 然而,相反,它打印
reflect.methodValueCall
Run Code Online (Sandbox Code Playgroud)
*Person我怎样才能让这个脚本打印 的方法的名称?
小智 6
使用类型来获取方法名称:
t := reflect.TypeOf(&person)
for i := 0; i < t.NumMethod(); i++ {
m := t.Method(i)
fmt.Println(m.Name)
}
Run Code Online (Sandbox Code Playgroud)