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
Libérer: 2024-10-30 18:00:04
original
723 Les gens l'ont consulté

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

La fonction invoquée est définie comme :

<code class="go">func (c *Controller) Root(params map[string][]string) map[string] string{}</code>
Copier après la connexion

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

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!

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