如何正确使用。调用反射包

浏览:19日期:2024-02-02
如何解决如何正确使用。调用反射包?

来自Value.Call documentation:

呼叫调用函数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)解决方法

我的代码有最后一个问题,涉及反射包中的.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

任何帮助将非常感激!

相关文章: