Maison > développement back-end > Golang > 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
Libérer: 2024-10-30 00:56:29
original
705 Les gens l'ont consulté

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>
Copier après la connexion

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>
    Copier après la connexion

    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>
    Copier après la connexion

    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>
    Copier après la connexion
  4. Ajouter le nom de la méthode à une tranche :

    <code class="go">s = append(s, name)</code>
    Copier après la connexion

    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>
Copier après la connexion

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal