Obtention de noms de méthodes à partir d'un type d'interface
Dans le monde de la programmation, la réflexion permet d'accéder à des informations sur les types et les objets au moment de l'exécution. Un scénario courant consiste à récupérer les noms de méthodes à partir d’un type d’interface. Supposons que vous ayez la définition d'interface suivante :
<code class="go">type FooService interface { Foo1(x int) int Foo2(x string) string }</code>
L'objectif est d'utiliser la réflexion pour générer une liste de noms de méthodes, dans ce cas, ["Foo1", "Foo2"].
Solution :
Pour y parvenir, les étapes suivantes sont impliquées :
Obtenir le reflet.Type du type d'interface :
<code class="go">type FooService interface {...} t := reflect.TypeOf((*FooService)(nil)).Elem()</code>
Cette ligne récupère le type de réflexion de l'interface FooService, qui est le type concret sous-jacent.
Parcourir les méthodes du type :
<code class="go">for i := 0; i < t.NumMethod(); i++ {</code>
La méthode NumMethod renvoie le nombre de méthodes, vous permettant de parcourir chacune d'elles.
Récupérez le nom de chaque méthode :
<code class="go">name := t.Method(i).Name</code>
Ajouter le nom de la méthode à une tranche :
<code class="go">s = append(s, name)</code>
Cela accumule les noms de méthodes dans une tranche.
Rassembler le tout :
<code class="go">type FooService interface { Foo1(x int) int Foo2(x string) string } func main() { t := reflect.TypeOf((*FooService)(nil)).Elem() var s []string for i := 0; i < t.NumMethod(); i++ { name := t.Method(i).Name s = append(s, name) } fmt.Println(s) // Output: [Foo1 Foo2] }</code>
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!