Maison > développement back-end > Golang > Comment puis-je appeler une méthode Go Struct par son nom à l'aide de Reflection ?

Comment puis-je appeler une méthode Go Struct par son nom à l'aide de Reflection ?

Patricia Arquette
Libérer: 2024-12-24 05:12:19
original
210 Les gens l'ont consulté

How Can I Call a Go Struct Method by Name Using Reflection?

Appeler une méthode Struct par son nom dans Go

Cette question explore la possibilité d'appeler une méthode sur une structure par son nom dans Go. Le demandeur recherche une solution qui prend la forme de CallFunc("MyStruct", "MyMethod"). Pour répondre à cette exigence, nous approfondirons l'utilisation de la réflexion dans Go.

Réflexion sur les valeurs et les méthodes

La clé pour appeler une méthode par son nom réside dans en utilisant le package Reflect. La fonction réfléchissant.ValueOf peut produire un reflet.Value qui encapsule la valeur d'une variable. Pour les structures, vous pouvez obtenir une valeur qui représente la structure elle-même ou un pointeur vers celle-ci.

Une fois que vous avez un reflet.Value, vous pouvez utiliser la méthode MethodByName pour rechercher une méthode par son nom. Cela renvoie un objet reflex.Method, qui représente la méthode identifiée.

Putting It All Together

Pour terminer le processus d'appel d'une méthode par son nom, vous pouvez appeler la méthode Call sur la méthode reflex. Cela nécessite un tableau d'objets reflex.Value comme arguments, représentant les paramètres à transmettre à la méthode appelée.

Dans l'exemple de code fourni, la structure T a une méthode Foo. Pour appeler cette méthode à l'aide de la réflexion, vous devez récupérer la valeur réflexion de &t (un pointeur vers l'instance T), rechercher la méthode Foo à l'aide de MethodByName et enfin l'invoquer avec Call.

package main

import "fmt"
import "reflect"

type T struct {}

func (t *T) Foo() {
    fmt.Println("foo")
}

func main() {
    var t T
    reflect.ValueOf(&t).MethodByName("Foo").Call([]reflect.Value{})
}
Copier après la connexion

L'exécution de ce code imprime "foo", démontrant l'appel réussi de la méthode Foo par son nom. Cette approche offre un moyen polyvalent d'interagir dynamiquement avec les structures et leurs méthodes au moment de l'exécution.

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