我的代码最后一个问题涉及到反射包中的.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,iflen(in) == 3
,v.Call(in)
represents the Go callv(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)