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
Barbara Streisandoriginal
2024-11-03 08:51:29988parcourir

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
}

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>

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!

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