Go反射调用Set方法给reflect.Value赋值[]int64切片报错解决
报错原因
field是reflect.Value类型,其Set()方法的签名为func (v Value) Set(x Value),要求入参必须是reflect.Value类型。你直接传入原生[]int64类型的articles变量,不符合入参类型要求,因此触发cannot use articles (variable of type []int64) as reflect.Value value in argument to field.Set报错。
你代码里用到的SetString/SetInt/SetFloat/SetBool都是reflect.Value针对基础类型提供的快捷设值方法,内部已经做了类型包装,不需要手动传reflect.Value类型,但切片等复合类型没有对应快捷方法,必须手动做类型转换。
修复方案
调用reflect.ValueOf()将原生Go值转换为对应的reflect.Value实例,再传入Set()方法即可。
对应你代码中[]int64分支的错误写法修改如下:
case "[]int64": articles := []int64{} initData := []interface{}{ val, } for _, data := range initData { for _, v := range data.([]interface{}) { t := v articles = append(articles, t.(int64)) } } // 修正:将原生[]int64值包装为reflect.Value后传入 field.Set(reflect.ValueOf(articles))
内容的提问来源于stack exchange,提问作者jansemrau
相关产品推荐
相关产品推荐

