![](/img/trans.png)
[英]In Go, how to check that an interface implements all of a struct's exported methods?
[英]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)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.