Dada una función, ¿es posible obtener su nombre? Di:¿Cómo obtener el nombre de una función en Go?
func foo() {
}
func GetFunctionName(i interface{}) string {
// ...
}
func main() {
// Will print "name: foo"
fmt.Println("name:", GetFunctionName(foo))
}
me dijeron que runtime.FuncForPC ayudaría, pero no pude entender cómo usarlo.
Si bien esto parece funcionar, es posible que se requiera algo de cuidado aquí: la documentación para .Pointer() indica "Si v's Kind es Func, el puntero devuelto es un puntero de código subyacente, pero no necesariamente suficiente para identificar una función única. La única garantía es que el resultado es cero si y solo si v es un valor cero de func ". – jochen
@jochen does "not an single func" significa que podría devolver falsos positivos (es decir, el puntero de una función diferente)? – themihai
@themihai No sé, la oración que cité es todos los documentos en https://golang.org/pkg/reflect/#Value.Pointer sobre esto. Pero la cita parece indicar que uno podría obtener el mismo puntero para diferentes funciones, ¿no es así? Y si este es el caso, 'GetFunctionName' podría devolver el mismo nombre para diferentes funciones? – jochen