go - 当结构包含获取csv数据的接口和范围时如何进行类型转换
问题描述
情况是我在 struct 中有一个接口,现在我必须对数据进行范围以获得 CSV 格式。这是支柱和界面
PaginatedListResponseDataRec struct {
TotalDBRecCnt int `json:"totalrecords"` // total number of records exists in the database.
FilteredRecCnt int `json:"filteredrecords"` // number of records filtered based on the search criteria
RecList interface{} `json:"records"` // list of filtered records
TodayDBRecCnt int `json:"todayrecords"`}
现在在这个结构 RecList 中包含我想以 CSV 格式显示的数据。
isSuccess, responseData := dbAccess.GetJobList(reqFilterRec, clientID)
这里 responseData 是 PaginatedListResponseDataRec 结构的类型
v := reflect.ValueOf(responseData.RecList)
values := make([]interface{}, v.NumField())
for i := 0; i < v.NumField(); i++ {
values[i] = v.Field(i).Interface()
}
fmt.Println("values: ", values)
这是我用来范围的代码,但这返回错误
exception: &runtime.TypeAssertionError{_interface:(*runtime._type)(0xa458e0), concrete:(*runtime._type)(0xa05960), asserted:(*runtime._type)(0xa05c60), missingMethod:""}
任何人都可以帮助..
解决方案
使用反射的切片/数组范围不是用 NumField 和 Field 完成的,它们在结构中使用。你需要的是 Len() 和 Index():
v := reflect.ValueOf(responseData.RecList)
values := make([]interface{}, v.Len())
for i := 0; i < v.Len(); i++ {
values[i] = v.Index(i).Interface()
}
fmt.Println("values: ", values)
推荐阅读
- java - 为什么子对象调用具有主方法的超类的私有方法?
- rust - 了解 rust 借用和取消引用
- node.js - 在 Sequelize 操作之后关闭我的连接是一个好习惯吗?
- swift - 如何在应用程序中读取 Localizable.strings
- python - 如何在另一个 python 脚本中调用其他 python 脚本?
- azure-web-app-service - 为什么“Azure Web 服务”在 Lighthouse 报告中显示为第三方代码?
- apache-superset - 我可以在 Apache Superset 中创建自定义图表吗?
- google-api - Google Picker API - Word 版本
- java - Android Wear:保持显示开启
- javascript - 错误:重新渲染过多。React 限制渲染次数以防止无限循环