Maison  >  Article  >  développement back-end  >  Comment utiliser correctement la fonction « reflect.Call » avec un paramètre de carte ?

Comment utiliser correctement la fonction « reflect.Call » avec un paramètre de carte ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-30 20:17:03312parcourir

How to Correctly Use the `reflect.Call` Function with a Map Parameter?

Résolution du problème d'utilisation de .Call dans le package Reflect

Lors de l'utilisation de la fonction .Call dans le package Reflect, il est crucial de respecter le format de paramètre requis. Cet article vous guidera tout au long du processus d'utilisation correcte de la fonction .Call et de manipulation de la variable in pour répondre à la méthode cible.

Dans l'exemple de code fourni :

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

Le in La variable est initialisée comme une tranche vide. Comme la méthode que vous avez l'intention d'appeler attend un seul paramètre de type map[string][]string, la tranche in doit contenir une instance de réflexion.Value contenant cette carte.

Pour résoudre ce problème, l'approche correcte est pour créer une carte, puis la convertir en réflexion.Value à l'aide de réflexion.ValueOf. Voici le code ajusté :

m := map[string][]string{"foo": []string{"bar"}}
in := []reflect.Value{reflect.ValueOf(m)}

return_values := reflect.ValueOf(&controller_ref).MethodByName(action_name).Call(in)

Avec cette modification, la variable in transmettra correctement la carte à la méthode cible, garantissant ainsi la réussite de l'appel de fonction souhaité.

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