加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

功能 – 如何正确使用.Call in reflect package,Golang?

发布时间:2020-12-16 19:19:39 所属栏目:大数据 来源:网络整理
导读:我的代码最后一个问题涉及到反射包中的.Call函数. 所以我正在打这样的电话: params := "some map[string][]string"in := make([]reflect.Value,0)return_values := reflect.ValueOf(controller_ref).MethodByName(action_name).Call(in) 我正在制作.Call的
我的代码最后一个问题涉及到反射包中的.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

任何帮助将非常感激!

Value.Call documentation

Call calls the function v with the input arguments in. For example,if len(in) == 3,v.Call(in) represents the Go call v(in[0],in[1],in[2]).

因此,如果要使用一个参数调用函数,则必须包含一个reflect.Value
正确的类型,在你的情况下映射[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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读