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
考虑到这一点,如果要检查类型是否实现某个方法集,则可能会发现使用接口和类型断言更为容易.例如:
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{}