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.
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>
où "params" est la carte que vous souhaitez transmettre à la fonction.
Pour l'exemple de méthode :
<code class="go">func (c *Controller) Root(params map[string][]string) map[string] string{}</code>
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>
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!