У меня есть библиотека, в которой есть структуры Client
и MockClient
, которые реализуют один и тот же интерфейс ClientInterface
. Я хотел бы написать модульные тесты, чтобы сохранить эти структуры в syn c, чтобы они не только реализовывали интерфейс, но и чтобы MockClient
имел все методы Client
. С этой целью я хотел бы получить список методов структуры, чтобы напечатать информационное сообщение об ошибке, если один из методов Client
отсутствует в MockClient
.
Я попытался адаптировать Как получить имя функции в 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
?