Maison > développement back-end > Golang > Comment répertorier par programme les noms de méthodes définis dans une interface Go ?

Comment répertorier par programme les noms de méthodes définis dans une interface Go ?

Barbara Streisand
Libérer: 2024-11-03 08:51:29
original
987 Les gens l'ont consulté

How do you programmatically list the method names defined in a Go interface?

Liste des noms de méthodes dans un type d'interface

Dans Go, les interfaces définissent un contrat de méthodes qu'un type doit implémenter. Lorsque vous interagissez avec des interfaces au moment de l'exécution, vous devrez peut-être accéder aux noms de leurs méthodes.

Problème :

Considérez la définition d'interface suivante :

type FooService interface {
    Foo1(x int) int
    Foo2(x string) string
}
Copier après la connexion

Comment pouvez-vous générer par programme une liste des noms de méthodes, c'est-à-dire ["Foo1", "Foo2"], à partir de l'interface FooService ?

Réponse :

Pour récupérer la liste des noms de méthodes d'un type d'interface, vous pouvez utiliser la réflexion d'exécution :

<code class="go">t := reflect.TypeOf((*FooService)(nil)).Elem()
var s []string
for i := 0; i < t.NumMethod(); i++ {
    s = append(s, t.Method(i).Name)
}</code>
Copier après la connexion

Explication :

  1. reflect.TypeOf( (*FooService)(nil)).Elem() récupère le reflet.Type de l'interface.
  2. t.NumMethod() renvoie le nombre de méthodes dans l'interface.
  3. t.Method (i) récupère la i-ème méthode de l'interface.
  4. t.Method(i).Name renvoie le nom de la méthode.

Exemple de Playground :

https://go.dev/play/p/6cXnZKiKVw1

Astuce :

Référez-vous à la documentation sur "Comment obtenir le reflet.Type d'une interface ?" pour obtenir des informations sur l'obtention du reflet.Type d'une interface.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal