为了账号安全,请及时绑定邮箱和手机立即绑定

如何动态反射。新参数并调用函数?

如何动态反射。新参数并调用函数?

Go
Cats萌萌 2022-10-24 15:16:28
我想在接收到 http 调用时使用普通 func 而不是 HttpHandler,所以我应该动态新参数来调用 func。package mainimport (    "fmt"    "reflect")func main() {    invoke(test)}func invoke(function interface{}) {    funcType := reflect.TypeOf(function)    if funcType.Kind() == reflect.Func {        paramType := funcType.In(0).Elem()        input := reflect.New(paramType)        input.Elem().Field(0).SetString("neason")        input.Elem().Field(1).SetInt(18)        fmt.Println(input)        funcValue := reflect.ValueOf(function)        params := []reflect.Value{            reflect.ValueOf(input),        }        funcValue.Call(params)    }}type Input struct {    Name string    Age  int}type Output struct {    Name string    Age  int}func test(input *Input) Output {    return Output{        Name: input.Name,        Age:  input.Age,    }}它会恐慌:反射:使用 *reflect.Value 作为类型 *main 调用。输入如何动态反射。新参数并调用 func ?
查看完整描述

1 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

你有一个额外的reflect.Value包装层。input直接作为参数使用。它已经是一个reflect.Value.

    params := []reflect.Value{input}

https://go.dev/play/p/dpIspUFfbu0


查看完整回答
反对 回复 2022-10-24
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号