我的代码有最后一个问题,涉及反射包中的.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
任何帮助将非常感激!
来自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)
本文向大家介绍Go语言中反射的正确使用,包括了Go语言中反射的正确使用的使用技巧和注意事项,需要的朋友参考一下 介绍 反射是元数据编程的一种形式,指的是程序获得本身结构的一种能力。不同语言的反射模型实现不一样,本文中的反射,仅仅指的是Go语言中的反射模型。 反射有两个问题,在使用前需要三思: 大量的使用反射会损失一定性能 Clear is better than clever. Reflectio
问题内容: 我有两节课: 我有一个实例B。如何调用A.method()从b?基本上,效果与super.method()从调用相同B。 但是上述代码仍会调用。 问题答案: 如果使用的是JDK7,则可以使用MethodHandle实现此目的:
问题内容: 如何使用反射调用带有参数的方法? 我想指定这些参数的值。 问题答案: 这是一个使用涉及原语的反射调用方法的简单示例。 要健壮,应该捕获和处理所有检查反射有关的异常,,。
我不知道如何使用 React 正确实现发布者/订阅者方案。我有一个有效的解决方案,但对我来说,实现似乎不正确: 我的问题是,我需要手动实现发布者来注册订阅者并传递事件: 然后,我有一个WorkQueue处理器(应该是消费者): 它工作得很好,但很难看。在这个取自Spring Guides的示例中,他们使用EventBus将事件从发布者路由到消费者,但当我尝试将其与处理器链接时,我得到了以下编译器错
问题内容: 我只想检索UserAccount类中的某些列,所以我有以下代码: 我得到了空值作为回报。但是,如果我注释掉setProjections,我将获得具有所有属性的用户。在这种情况下,如何正确使用setProjection? 问题答案: 它返回一个Object数组,因此代码应为:
问题内容: 我不知道我在哪里错了:/。当我运行这段代码时,我得到的只是一个空白元素。我似乎无法让insertRule方法执行任何操作(甚至不会产生错误)。我想念什么吗? 问题答案: 这有点令人困惑,但是您的代码确实可以工作,只是您看不到返回的XML树中插入的规则。 为了验证您的代码是否有效,您可以执行两个测试: 运行上面的代码片段,您可以看到CSS规则确实适用。并且属性也在控制台中更改。 当浏览器