Maison  >  Article  >  développement back-end  >  Comment récupérer une liste de noms de méthodes à partir d’une interface dans Go à l’aide de la réflexion ?

Comment récupérer une liste de noms de méthodes à partir d’une interface dans Go à l’aide de la réflexion ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-30 09:15:27858parcourir

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

Obtention d'une liste de noms de méthodes à partir d'une interface

Dans Go, la réflexion permet d'inspecter et de manipuler la structure interne d'un programme au moment de l'exécution . Cela inclut la possibilité d'accéder à des informations sur un type d'interface, telles que ses noms de méthodes.

Considérez l'interface suivante :

<code class="go">type FooService interface {
    Foo1(x int) int
    Foo2(x string) string
}</code>

Pour obtenir une liste des noms de méthodes pour cette interface en utilisant réflexion :

  1. Obtenir le reflet.Type pour le type d'interface :
<code class="go">t := reflect.TypeOf((*FooService)(nil)).Elem()</code>

Cette ligne récupère le reflet.Type pour le type béton qui implémente l'interface FooService.

  1. Récupérer le nombre de méthodes :
<code class="go">for i := 0; i < t.NumMethod(); i++ {</code>

La fonction NumMethod() renvoie le nombre de méthodes dans l'interface.

  1. Obtenir les noms des méthodes :
<code class="go">s = append(s, t.Method(i).Name)</code>

La fonction Method(i) renvoie un objet réflexion.Method représentant la méthode à l'index i. Le champ Nom de cet objet contient le nom de la méthode.

Les listes résultantes contiendront les noms de méthodes ["Foo1", "Foo2"].

Explications :

  • La syntaxe (*FooService)(nil) est utilisée pour créer un pointeur vers une instance anonyme de l'interface FooService. Ceci est nécessaire pour obtenir le reflet.Type pour l'interface.
  • La méthode Elem() renvoie le reflet.Type pour le type concret qui implémente l'interface, au lieu du type d'interface lui-même.
  • La fonction NumMethod() renvoie le nombre de méthodes déclarées dans l'interface, même si le type concret implémente des méthodes supplémentaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn