Maison > développement back-end > Golang > Comment éviter l'erreur « reflect : Appel avec trop peu d'arguments d'entrée » lors de l'utilisation de .Call in Go ?

Comment éviter l'erreur « reflect : Appel avec trop peu d'arguments d'entrée » lors de l'utilisation de .Call in Go ?

Susan Sarandon
Libérer: 2024-10-29 13:43:29
original
552 Les gens l'ont consulté

How to Avoid

Utilisation appropriée de la méthode .Call du package Reflect

En travaillant avec la fonction .Call du package Reflect, les développeurs rencontrent souvent l'erreur « reflect : appelez avec trop peu d'arguments d'entrée ". Ce problème provient de la nécessité de remplir le paramètre "in" avec la valeur appropriée représentant l'entrée de la fonction.

Construction de l'argument "in"

Pour résoudre ce problème, l'argument "in" doit être une tranche d’objets Reflect.Value, où chaque valeur représente le type attendu du paramètre de fonction correspondant. Dans l'exemple fourni, la méthode nécessite un seul paramètre de type map[string][]string.

Pour créer la tranche contenant le paramètre d'entrée, l'approche correcte consiste à utiliser :

<code class="go">in := []reflect.Value{reflect.ValueOf(params)}</code>
Copier après la connexion

où "params" est la carte que vous souhaitez transmettre à la fonction.

Exemple d'utilisation

Pour l'exemple de méthode :

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

L'appel correct en utilisant . L'appel serait :

<code class="go">params := map[string][]string{"foo": []string{"bar"}}
in := []reflect.Value{reflect.ValueOf(params)}
return_values := reflect.ValueOf(&controller_ref).MethodByName(action_name).Call(in)</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!

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