一尘不染

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

go

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

例如:

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

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

有什么好办法吗?


阅读 230

收藏
2020-07-02

共1个答案

一尘不染

您可以使用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

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

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{}
2020-07-02