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/