go - 如何在 Golang 中转储结构的方法?

标签 go

Golang 的“fmt”包有一个名为 Printf("%+v", anyStruct) 的转储方法。我正在寻找任何方法来转储结构及其方法

例如:

type Foo struct {
    Prop string
}
func (f Foo)Bar() string {
    return f.Prop
}

我想检查 Bar() 方法是否存在于 Foo 类型的初始化实例中(不仅仅是属性)。

有什么好的方法吗?

最佳答案

您可以使用 reflect 包列出一个类型的方法。例如:

fooType := reflect.TypeOf(Foo{})
for i := 0; i < fooType.NumMethod(); i++ {
    method := fooType.Method(i)
    fmt.Println(method.Name)
}

您可以在这里尝试一下:http://play.golang.org/p/wNuwVJM6vr

考虑到这一点,如果您想检查一个类型是否实现了某个方法集,您可能会发现使用接口(interface)和类型断言会更容易。例如:

func implementsBar(v interface{}) bool {
    type Barer interface {
        Bar() string
    }
    _, ok := v.(Barer)
    return ok
}

...
fmt.Println("Foo implements the Bar method:", implementsBar(Foo{}))

或者,如果您只想要编译时断言某个特定类型具有这些方法,您可以简单地在某处包含以下内容:

var _ Barer = Foo{}

关于go - 如何在 Golang 中转储结构的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50164784/

相关文章:

linux - Golang go1.14.7.linux-amd64.tar.gz 校验和不匹配

sql - 是否可以从 sql.Rows 获取 SQL 查询字符串?

go - 不同的结构重用相同的方法

go - 保存正在尝试更新 created_at 列

戈朗 : why following code snippet do not write to file?

go - 为什么安装dlv失败

Go Gorm 不显示数据有很多

go - 为什么闭包中本地分配的变量在外部分配时的工作方式不同?

go - 将字符串转换为时间并在 golang 中解析

pointers - Go结构指针不是唯一的