Recuperar el nombre de la función con reflexión
En Go, la reflexión proporciona el mecanismo para inspeccionar y manipular las estructuras del programa en tiempo de ejecución. Acceder al nombre de una función es uno de esos casos de uso. Sin embargo, intentar obtener el nombre directamente de su tipo puede dar como resultado una cadena vacía.
Comportamiento esperado
Recuperar el nombre de una función usando reflect.TypeOf(función). Nombre() devuelve una cadena vacía ya que apunta al tipo en sí, que no contiene el nombre de la función.
Solución
Para recuperar el nombre de la función, necesita utilizar runtime.FuncForPC. Esta función toma el puntero al valor reflejado de la función y devuelve un puntero a una estructura *Func. Llamar al método Name en esta *Func produce el nombre de función esperado como:
name := runtime.FuncForPC(reflect.ValueOf(function).Pointer()).Name()
This El enfoque devuelve tanto el paquete como el nombre de la función, p. "paquete.función". Si lo desea, el nombre del paquete se puede extraer tokenizando la cadena.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3