功能 – 如何正确使用.Call in reflect package,Golang?

前端之家收集整理的这篇文章主要介绍了功能 – 如何正确使用.Call in reflect package,Golang?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的代码最后一个问题涉及到反射包中的.Call函数.

所以我正在打这样的电话:

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

我正在制作.Call的方法如下:

func (c *Controller) Root(params map[string][]string) map[string] string{}

我不太明白的是如何操纵“in”变量以便将我需要的地图正确传递到函数中.我看到make()中的第二个参数是参数的长度?但我不太明白如何格式化变量以正确传递我的参数.我递归地运行错误消息:

reflect: Call with too few input arguments

任何帮助将非常感激!

Value.Call documentation

Call calls the function v with the input arguments in. For example,if len(in) == 3,v.Call(in) represents the Go call v(in[0],in[1],in[2]).

因此,如果要使用一个参数调用函数,则必须包含一个reflect.Value
正确的类型,在你的情况下映射[string] []字符串.

表达方式

in := make([]reflect.Value,0)

创建一个长度为0的切片.将此传递给Value.Call将导致您收到的恐慌
需要1个参数,而不是零.

正确的电话会是:

m := map[string][]string{"foo": []string{"bar"}}

in := []reflect.Value{reflect.ValueOf(m)}

myMethod.Call(in)

猜你在找的Go相关文章