"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo utilizar correctamente la función `reflect.Call` con un parámetro de mapa?

¿Cómo utilizar correctamente la función `reflect.Call` con un parámetro de mapa?

Publicado el 2024-11-08
Navegar:355

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

Resolviendo el problema de uso de .Call en el paquete reflect

Al utilizar la función .Call dentro del paquete reflect, es crucial cumplir con el formato de parámetro requerido. Este artículo lo guiará a través del proceso de uso correcto de la función .Call y manipulación de la variable in para atender el método de destino.

En el código de muestra proporcionado:

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

La variable in se inicializa como un segmento vacío. Como el método que desea llamar espera un único parámetro de tipo map[string][]string, el segmento in debe contener una instancia de reflect.Value que contenga este mapa.

Para rectificar este problema, el enfoque correcto es para crear un mapa y luego convertirlo en reflect.Value usando reflect.ValueOf. Aquí está el código ajustado:

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

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

Con esta modificación, la variable in pasará correctamente el mapa al método de destino, asegurando que la llamada a la función deseada se realice correctamente .

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3