我的代码的最后一个问题涉及反射包中的.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()中的第二个参数是参数的长度吗?但是我不太了解如何格式化var以正确传递参数。我递归地遇到错误消息:
reflect: Call with too few input arguments
任何帮助将非常感激!
呼叫调用函数
v
与输入参数。例如,如果len(in) == 3
,v.Call(in)
代表去叫v(in[0], in[1], in[2])
。
因此,如果要使用一个参数调用函数,则in
必须包含reflect.Value
正确的类型之一(对于您的情况)map[string][]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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句