2

我有一个库,其中有ClientMockClient都实现相同ClientInterface接口的结构。我想编写单元测试以使这些结构保持同步,以便它们不仅实现接口,而且MockClient具有所有Client的方法。为此,我想获取一个结构的方法列表,以便ClientMockClient.

我已经尝试过调整如何在 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's 方法的名称?

4

1 回答 1

3

使用类型获取方法名称:

t := reflect.TypeOf(&person)
for i := 0; i < t.NumMethod(); i++ {
    m := t.Method(i)
    fmt.Println(m.Name)
}

在操场上运行它

于 2020-01-20T22:25:56.073 回答