Вы можете перечислить методы типа с помощью пакета 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{}