Goでは、オブジェクトがメソッドに応答するかどうかをどのように確認しますか?
たとえば、Objective-Cでは、これは次の方法で実現できます。
if ([obj respondsToSelector:@selector(methodName:)]) { // if method exists
[obj methodName:42]; // call the method
}
簡単なオプションは、チェックしたいメソッドだけでインターフェースを宣言してから、次のような型に対して型アサートを実行することです。
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
Objがinterface{}
の場合、Goタイプのアサーションを使用できます。
if correctobj, ok := obj.(interface{methodName()}); ok {
correctobj.methodName()
}