在使用 Reflect 包的 .Call 函数时,开发者经常会遇到错误“reflect: Call with too much inputargs” ”。此问题源于需要使用代表函数输入的适当值填充“in”参数。
要解决此问题,需要使用“in”参数必须是reflect.Value对象的切片,其中每个值代表相应函数参数的预期类型。在提供的示例中,该方法需要类型为 map[string][]string 的单个参数。
要创建包含输入参数的切片,正确的方法是使用:
<code class="go">in := []reflect.Value{reflect.ValueOf(params)}</code>
其中“params”是您希望传递给函数的映射。
示例方法:
<code class="go">func (c *Controller) Root(params map[string][]string) map[string] string{}</code>
正确的调用使用 .呼叫将是:
<code class="go">params := map[string][]string{"foo": []string{"bar"}} in := []reflect.Value{reflect.ValueOf(params)} return_values := reflect.ValueOf(&controller_ref).MethodByName(action_name).Call(in)</code>
以上是在 Go 中使用 .Call 时如何避免'reflect: Call with too Few inputargs”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!