【发布时间】:2017-10-06 22:19:12
【问题描述】:
我正在调用反射函数,但我目前一直在尝试获取返回值。
示例代码:
func (c *Client) Send(funcName protoFunction, data interface{}) (interface{}, error) {
funcList := c.GetProtoFuncList()
ctx := context.Background()
f := reflect.ValueOf(funcList[funcName.String()])
vals := make([]reflect.Value, 2)
vals[0] = reflect.ValueOf(ctx)
vals[1] = reflect.ValueOf(data)
value := f.Call(vals)
log.Debug(value)
return nil, nil
}
如何从“value”中获取返回值并正确返回?
干杯
【问题讨论】:
-
你得到它们了。您的代码中的
value将是返回值的一部分。你遇到了什么问题? -
如果您查看
Callsignature,您的value是[]reflect.Value。你甚至打印出来。究竟是什么问题? -
只是想知道,为什么要使用反射,为什么不直接调用它,并返回结果,例如
return funcList[funcName.String()].(func(context.Context, interface{})) (interface{}, error)) (ctx, data)? (只有在funcList中存储了不同类型的函数时才需要类型断言;如果没有,你甚至可以去掉它,它变成return funcList[funcName.String()](ctx, data)。) -
返回类型是 Value 类型,但是我会使用 send() 函数将调用的值作为 interface{} 类型返回,错误。如何将 []Value 中的错误类型转换为错误类型?
标签: go reflection