urls tutorial template examples desde create cero go go-reflect

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