Maison  >  Article  >  développement back-end  >  Comment puis-je récupérer par programme les noms de méthodes d’un type d’interface à l’aide de la réflexion dans Go ?

Comment puis-je récupérer par programme les noms de méthodes d’un type d’interface à l’aide de la réflexion dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 05:48:01374parcourir

How can I programmatically retrieve method names from an interface type using reflection in Go?

Obtention des noms de méthodes à partir des types d'interface

Obtenir une liste de noms de méthodes pour un type d'interface via la réflexion à l'exécution est une tâche courante. Par exemple, dans un type d'interface comme :

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

Vous souhaiterez peut-être récupérer dynamiquement les noms de méthodes ["Foo1", "Foo2"] en utilisant la réflexion.

Solution :

Pour y parvenir, utilisez l'extrait de code suivant :

t := reflect.TypeOf((*FooService)(nil)).Elem()
var s []string
for i := 0; i < t.NumMethod(); i++ {
    s = append(s, t.Method(i).Name)
}

Explication :

  1. Récupérez le Type d'interface : Pour commencer, acquérez le reflet.Type du type d'interface. Ceci est accompli en obtenant d'abord le reflet.Type d'un pointeur nul vers le type d'interface à l'aide de reflet.TypeOf((*FooService)(nil)). Ensuite, utilisez la méthode Elem() pour dériver le type sous-jacent, qui est le type d'interface lui-même.
  2. Itérer sur les méthodes : Ensuite, parcourez les méthodes du type d'interface à l'aide d'une boucle. La méthode NumMethod() fournit le nombre de méthodes et Method(i) récupère la i-ème méthode.
  3. Extraire les noms des méthodes : Pour chaque méthode, extrayez son nom à l'aide du champ Nom du type réflexion.Méthode. La liste résultante des noms de méthodes est stockée dans la tranche s.

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