Ao utilizar a função .Call no pacote de reflexão, é crucial aderir ao formato de parâmetro necessário. Este artigo irá guiá-lo através do processo de uso correto da função .Call e manipulação da variável in para atender ao método de destino.
No código de exemplo fornecido:
params := "some map[string][]string" in := make([]reflect.Value,0) return_values := reflect.ValueOf(&controller_ref).MethodByName(action_name).Call(in)
A variável in é inicializada como uma fatia vazia. Como o método que você pretende chamar espera um único parâmetro do tipo map[string][]string, o in slice deve conter uma instância reflect.Value contendo este mapa.
Para corrigir esse problema, a abordagem correta é para criar um mapa e depois convertê-lo em um reflect.Value usando reflect.ValueOf. Aqui está o 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)
Com esta modificação, a variável in passará corretamente o mapa para o método de destino, garantindo que a chamada de função desejada seja bem-sucedida .
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3