Golang“ fmt ”包有一个名为Printf("%+v", anyStruct)
的转储方法。我正在寻找任何方法来转储struct 及其方法。
例如:
type Foo struct {
Prop string
}
func (f Foo)Bar() string {
return f.Prop
}
我想检查Bar()
类型的初始化实例中是否存在Foo
方法(不仅是属性)。
有没有好办法呢?
答案 0 :(得分:32)
您可以使用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{}