我的代码遇到了最后一个问题,它涉及 reflect 包中的 .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
任何帮助将不胜感激!
最佳答案
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])
.
所以如果你想用一个参数调用一个函数,in
必须包含一个reflect.Value
正确的类型,在你的例子中是 map[string][]string
。
表达式
in := make([]reflect.Value,0)
创建一个长度为 0 的 slice 。将其传递给 Value.Call
将导致您收到的 panic
需要 1 个参数,而不是零。
正确的调用应该是:
m := map[string][]string{"foo": []string{"bar"}}
in := []reflect.Value{reflect.ValueOf(m)}
myMethod.Call(in)
关于function - 如何在 reflect 包中正确使用 .Call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20714939/