gogo-reflect

How to check if an object has a particular method?


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
}

Solution

  • 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 declaration 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
    } else {
        // do something like invoke m.F
    }