登录
首页 >  Golang >  Go问答

如何列出 Go 中结构体的方法?

来源:stackoverflow

时间:2024-03-10 09:06:24 325浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《如何列出 Go 中结构体的方法?》,主要介绍了,希望对大家的知识积累有所帮助,快点收藏起来吧,否则需要时就找不到了!

问题内容

我有一个库,其中有 clientmockclient 结构,它们都实现相同的 clientinterface 接口。我想编写单元测试来保持这些结构同步,以便它们不仅实现接口,而且使 mockclient 具有 client 的所有方法。为此,我想获取结构体方法的列表,以便在 client 中缺少 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 中结构体的方法?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>