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{}) }
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!