1 回答
TA贡献1851条经验 获得超4个赞
decode以下是修复问题中显示的第二个函数的方法。该声明
dest = reflect.ValueOf(result)
修改局部变量dest,而不是调用者的值。使用以下语句修改调用者的切片:
reflect.ValueOf(dest).Elem().Set(result)
问题中的代码在 reflect.MakeSlice 中创建的元素之后附加解码元素。生成的切片具有len(rows)零值,后跟len(rows)解码值。通过更改修复
result = reflect.Append(result, reflect.ValueOf(castedModelRow))
到:
result.Index(i).Set(model)
decode这是问题中第二个函数的更新版本:
func decode(dest interface{}, src string) {
var modelType reflect.Type = getStructType(dest)
rows, fields := getRows(src)
result := reflect.MakeSlice(reflect.SliceOf(modelType), len(rows), len(rows))
for i, row := range rows {
model := reflect.New(modelType).Elem()
for _, field := range fields {
fieldValue := getRowValue(row, field)
model.FieldByName(field).Set(fieldValue)
}
result.Index(i).Set(model)
}
reflect.ValueOf(dest).Elem().Set(result)
}
- 1 回答
- 0 关注
- 83 浏览
添加回答
举报