Maison >développement back-end >Golang >Comment transmettre correctement les paramètres à la fonction .Call dans le package Reflect ?

Comment transmettre correctement les paramètres à la fonction .Call dans le package Reflect ?

DDD
DDDoriginal
2024-10-30 18:00:04721parcourir

How to Correctly Pass Parameters to .Call Function in the reflect Package?

Comprendre .Call dans le package Reflect

Lors de l'utilisation de la fonction .Call dans le package Reflect, il est essentiel de comprendre comment manipuler correctement la variable "in" pour transmettre les paramètres de fonction appropriés.

Considérez le scénario suivant :

<code class="go">params := "some map[string][]string"
in := make([]reflect.Value, 0)
return_values := reflect.ValueOf(&controller_ref).MethodByName(action_name).Call(in)</code>

La fonction invoquée est définie comme :

<code class="go">func (c *Controller) Root(params map[string][]string) map[string] string{}</code>

Pour résoudre l'erreur « reflect : Appel avec trop peu d'arguments d'entrée », il est crucial de comprendre la syntaxe de .Call. Comme indiqué dans sa documentation, chaque élément de la tranche in correspond à un argument de fonction. Par conséquent, si votre fonction nécessite un seul paramètre, elle doit contenir un reflet.Valeur du type approprié.

Dans l'exemple fourni, l'approche correcte est :

<code class="go">m := map[string][]string{"foo": []string{"bar"}}

in := []reflect.Value{reflect.ValueOf(m)}

myMethod.Call(in)</code>

Cette ligne crée une carte, la convertit en reflet.Value et la transmet comme seul argument à l'appel de fonction.

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