问题
In Go, how do you check if an object responds to a method?
For example, in Objective-C this can be achieved by doing:
if ([obj respondsToSelector:@selector(methodName:)]) { // if method exists
[obj methodName:42]; // call the method
}
回答1:
A simple option is to declare an interface with just the method you want to check for and then do a type assert against your type like;
i, ok := myInstance.(InterfaceImplementingThatOneMethodIcareAbout)
// inline iface delcataration example
i, ok = myInstance.(interface{F()})
You likely want to use the reflect
package if you plan to do anything too crazy with your type; 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:
If obj is an interface{}
you can use Go type assertions:
if correctobj, ok := obj.(interface{methodName()}); ok {
correctobj.methodName()
}
来源:https://stackoverflow.com/questions/29684609/how-to-check-if-an-object-has-a-particular-method