go - tutorial - ¿Cómo verificar si un objeto tiene un método particular?
django urls (2)
En Go, ¿cómo verifica si un objeto responde a un método?
Por ejemplo, en Objective-C esto se puede lograr haciendo:
if ([obj respondsToSelector:@selector(methodName:)]) { // if method exists
[obj methodName:42]; // call the method
}
Si obj es una interface{}
puedes usar las aserciones de tipo Go:
if correctobj, ok := obj.(interface{methodName()}); ok {
correctobj.methodName()
}
Una opción simple es declarar una interfaz con solo el método que desea verificar y luego hacer una afirmación de tipo contra su tipo;
i, ok := myInstance.(InterfaceImplementingThatOneMethodIcareAbout)
// inline iface delcataration example
i, ok = myInstance.(interface{F()})
Es probable que desee usar el paquete de reflect
si planea hacer algo demasiado loco con su tipo; 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