"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo se recupera una lista de nombres de métodos de una interfaz en Go usando la reflexión?

¿Cómo se recupera una lista de nombres de métodos de una interfaz en Go usando la reflexión?

Publicado el 2024-11-11
Navegar:458

How do you retrieve a list of method names from an interface in Go using reflection?

Obtener una lista de nombres de métodos desde una interfaz

En Go, la reflexión permite inspeccionar y manipular la estructura interna de un programa en tiempo de ejecución . Esto incluye la capacidad de acceder a información sobre un tipo de interfaz, como los nombres de sus métodos.

Considere la siguiente interfaz:

type FooService interface {
    Foo1(x int) int
    Foo2(x string) string
}

Para obtener una lista de los nombres de los métodos para esta interfaz usando la reflexión:

  1. Obtenga el tipo reflect.Type para el tipo de interfaz:
t := reflect.TypeOf((*FooService)(nil)).Elem()

Esta línea recupera el reflect.Type para el tipo concreto que implementa la interfaz FooService.

  1. Recuperar el número de métodos:
for i := 0; i 

La función NumMethod() devuelve el número de métodos en la interfaz.

  1. Obtener los nombres de los métodos:
s = append(s, t.Method(i).Name)

La función Method(i) devuelve un objeto reflect.Method que representa el método en el índice i. El campo Nombre de este objeto contiene el nombre del método.

La lista resultante contendrá los nombres de los métodos ["Foo1", "Foo2"].

Explicaciones:

  • La sintaxis (*FooService)(nil) se utiliza para crear un puntero a una instancia anónima de la interfaz FooService. Esto es necesario para obtener el reflect.Type para la interfaz.
  • El método Elem() devuelve el reflect.Type para el tipo concreto que implementa la interfaz, en lugar del tipo de interfaz en sí.
  • La función NumMethod() devuelve el número de métodos declarados en la interfaz, incluso si el tipo concreto implementa métodos adicionales.
Último tutorial Más>

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