如何在 Go 中获取结构的方法列表?
How to get a list of a struct's methods in Go?
我有一个库,其中有 Client
和 MockClient
结构,它们都实现相同的 ClientInterface
接口。我想编写单元测试来使这些结构保持同步,以便它们不仅实现接口,而且 MockClient
拥有 Client
的所有方法。为此,我想获取结构方法的列表,以便在 MockClient
.
中缺少 Client
的方法之一时打印信息性错误消息
我已尝试将 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())
}
}
我想要这个脚本(在 https://play.golang.org/p/HwvhEPfWI5I 共享)打印 GetName
。然而,相反,它打印
reflect.methodValueCall
如何让这个脚本打印 *Person
的方法的名称?
使用类型获取方法名:
t := reflect.TypeOf(&person)
for i := 0; i < t.NumMethod(); i++ {
m := t.Method(i)
fmt.Println(m.Name)
}
我有一个库,其中有 Client
和 MockClient
结构,它们都实现相同的 ClientInterface
接口。我想编写单元测试来使这些结构保持同步,以便它们不仅实现接口,而且 MockClient
拥有 Client
的所有方法。为此,我想获取结构方法的列表,以便在 MockClient
.
Client
的方法之一时打印信息性错误消息
我已尝试将 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())
}
}
我想要这个脚本(在 https://play.golang.org/p/HwvhEPfWI5I 共享)打印 GetName
。然而,相反,它打印
reflect.methodValueCall
如何让这个脚本打印 *Person
的方法的名称?
使用类型获取方法名:
t := reflect.TypeOf(&person)
for i := 0; i < t.NumMethod(); i++ {
m := t.Method(i)
fmt.Println(m.Name)
}