我有一个库,其中包括了
我已经尝试过将如何在Go中获取函数名称?适配到这个简化的示例中:
我希望这个脚本(在https://play.golang.org/p/HwvhEPfWI5I分享)能够打印出
我该如何让这个脚本打印出
Client
和MockClient
结构体,它们都实现了同样的ClientInterface
接口。我想编写单元测试来保证这些结构体不仅仅是实现了接口,同时也保证MockClient
具有Client
的所有方法。为此,我需要获取结构体的方法列表,以便在MockClient
方法缺失Client
方法时打印出有用的错误信息。我已经尝试过将如何在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
的方法名?
var _ I = (*T)(nil)
或var _ I = T{}
(取决于您是测试T
本身还是*T
)。有关详细信息,请参见https://dev59.com/jGkv5IYBdhLWcg3wlRtc。当然,这与列出结构体的方法不同;它的用处在于当您定义一个接口并想要确保您编写的每个实现都实现了该接口时。 - torek