Maison  >  Article  >  développement back-end  >  Comment récupérer les noms de méthodes d’un type d’interface à l’aide de Reflection in Go ?

Comment récupérer les noms de méthodes d’un type d’interface à l’aide de Reflection in Go ?

DDD
DDDoriginal
2024-10-30 00:56:29546parcourir

How to Retrieve Method Names from an Interface Type using Reflection in Go?

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 :

  1. 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.

  2. 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.

  3. Récupérez le nom de chaque méthode :

    <code class="go">name := t.Method(i).Name</code>
  4. 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!

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