gpt4 book ai didi

go - 如何在 Go 中获取结构的方法列表?

转载 作者:行者123 更新时间:2023-12-01 22:16:23 25 4
gpt4 key购买 nike

我有一个库,其中有 ClientMockClient 结构,它们都实现相同的 ClientInterface 接口(interface)。我想编写单元测试以使这些结构保持同步,以便它们不仅实现接口(interface),而且 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)
}

Run it on the playground .

关于go - 如何在 Go 中获取结构的方法列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59831642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com