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 關注
- 106 瀏覽
添加回答
舉報