Как проверить, имеет ли объект определенный метод? В Go, как вы проверяете, отвечает ли объект методу? Например, в Objective-C это можно сделать, выполнив: if ([obj respondsToSelector:@selector(methodName:)]) { // if method exists [obj methodName:42]; // call the method } Ответ 1 Простая опция - объявить интерфейс только с помощью метода, который вы хотите проверить, а затем сделать тип assert против вашего типа, например: i, ok := myInstance.(InterfaceImplementingThatOneMethodIcareAbout) // inline iface delcataration example i, ok = myInstance.(interface{F()}) Вероятно, вы захотите использовать пакет reflect, если вы планируете сделать что-то слишком сумасшедшее в своем типе; http://golang.org/pkg/reflect st := reflect.TypeOf(myInstance) m, ok := st.MethodByName("F") if !ok { // method doesn't exist } // do something like invoke m Ответ 2 Если obj является interface{}, вы можете использовать утверждения типа Go: if correctobj, ok := obj.(interface{methodName()}); ok { correctobj.methodName() }
Ответ 1 Простая опция - объявить интерфейс только с помощью метода, который вы хотите проверить, а затем сделать тип assert против вашего типа, например: i, ok := myInstance.(InterfaceImplementingThatOneMethodIcareAbout) // inline iface delcataration example i, ok = myInstance.(interface{F()}) Вероятно, вы захотите использовать пакет reflect, если вы планируете сделать что-то слишком сумасшедшее в своем типе; http://golang.org/pkg/reflect st := reflect.TypeOf(myInstance) m, ok := st.MethodByName("F") if !ok { // method doesn't exist } // do something like invoke m
Ответ 2 Если obj является interface{}, вы можете использовать утверждения типа Go: if correctobj, ok := obj.(interface{methodName()}); ok { correctobj.methodName() }