当前位置: 首页 > news >正文

go根据反射生成的切片,DEBUG也能看到了

https://gitee.com/leijmdas/goweb3.git

本文展示了一个Go语言实现的用户数据查询和映射功能。代码定义了一个UsersDto结构体,包含id、trialPassed、trialFlag、rating和name等字段,并带有GORM标签用于数据库映射。核心功能包括: Test099_QueryModelOneMapStruct方法查询用户数据并映射到UsersDto结构体 MapStruct方法通过反射将查询结果转换为目标结构体切片 辅助函数NewSliceOfAny和NewOfPtrSome用于动态创建切片和指针实例 执行结果显示成功查询到3条用户

type UsersDto struct { basedto.BaseEntity `json:"-"` mapper.GoMapper[learnentity.Users, UsersDto] `json:"-"` Id string `json:"id"` TrialPassed bool `json:"trialPassed" gorm:"column:trial_passed;type:boolean` // 试训学员标志 TrialFlag bool `json:"trialFlag" gorm:"column:trial_flag;type:boolean` // 用户评分 Rating float64 `json:"rating"` Name string `json:"name" gorm:"column:name;type:varchar(50)"` }
func (self *TestDbSuite) Test099_QueryModelOneMapStruct() { var ret = dbdao.FindBeanUsersDao().QueryModel(3) var pageRet = ret.MapStruct(&UsersDto{}) golog.Info(pageRet) }
func (self *PageResult[T]) MapStruct(some any) *page.PageResult { var ret = self.PageResult if !self.ExistRecord() { return ret } ret.Data = baseutils.NewSliceOfAny(some, len(self.Data)) sliceVal := reflect.ValueOf(ret.Data) for i := range self.Data { var row = baseutils.NewOfPtrSome(some) err := gconv.Struct(self.Data[i], row) if err != nil { golog.Error("PageResult MapStruct err:", err) ret.FailMsg(err.Error()) return ret } sliceVal = reflect.Append(sliceVal, reflect.ValueOf(row)) } ret.Data = sliceVal.Interface() return ret }2026-05-04 09:02:00.999 [INFO] {"code": 200, "msg": "成功", "data": [ { "id": "1", "trialPassed": false, "trialFlag": false, "rating": 5, "name": "admin" }, { "id": "2", "trialPassed": false, "trialFlag": false, "rating": 5, "name": "子管理员sub" }, { "id": "18320807811", "trialPassed": false, "trialFlag": false, "rating": 5, "name": "" } ], "exist": true, "dataAgg": null, "dataRet": { }, "total": 303,"pageSize": 3, "pageCurrent": 1, "totalPages": 101 }
func NewSliceOfAny(some any, len int) any { var typeOf = reflect.TypeOf(some) // 如果是切片类型,获取切片的元素类型 if typeOf.Kind() == reflect.Slice { //elemType := typeOf.Elem() // 创建切片 sliceValue := reflect.MakeSlice(typeOf, 0, len) return sliceValue.Interface() } // 如果不是切片类型,创建一个包含该类型元素的切片 sliceType := reflect.SliceOf(typeOf) sliceValue := reflect.MakeSlice(sliceType, 0, len) return sliceValue.Interface() }
func NewOfPtrSome(some any) any { var typeOf = reflect.TypeOf(some) if typeOf.Kind() == reflect.Ptr { typeOf = typeOf.Elem() } var value = reflect.New(typeOf) return value.Interface() }
http://www.jsqmd.com/news/756924/

相关文章:

  • 2026年最新天津滨海新区离婚律所严格测评,高性价比共同债务认定律所优选 - 速递信息
  • 2026年5月AI模型排行榜:GPT-5.5、Claude Opus 4.7、DeepSeek V4三大阵营深度对比
  • 株洲黄金回收避坑指南:选福正美,不扣点不熔金 - 福正美黄金回收
  • 5分钟极速指南:如何在Windows 10/11上完美运行Android应用
  • 2026年5月京东云简易方法:OpenClaw怎么集成?Coding Plan配置及大模型Skill配置
  • 2026年最新揭秘!专业做北京除甲醛的排名究竟谁能拔得头筹? - 速递信息
  • 手把手配置AutoSar BSW的通信服务:基于Vector Davinci工具链的CAN/LIN实战
  • 破解钙片贴牌代加工痛点:4C全链路合规智造方法论如何打造高信任补钙产品? - 速递信息
  • 告别实时内核烦恼?在普通Ubuntu 22.04上安装EtherLab并连接ROS2的另一种思路
  • 广西广告标识公司 TOP10 排行榜(2026 最新权威测评) - 速递信息
  • 快速掌握游戏图形文件管理:DLSS Swapper终极操作指南
  • 用EGE图形库给C语言课设加个图形界面?手把手教你从登录界面到文件管理(附完整源码)
  • 构建高效软件架构的5个核心设计原则:从Plain Craft Launcher看模块化实战
  • ARM SME2非临时加载指令LDNT1原理与应用
  • 一文读懂 HarmonyOS 6.1 带来的十大重要升级
  • 【仅限2026年Q1开放】:FHIR 2026 C# SDK预发布版+HL7认证测试沙箱权限(附3家头部医疗IT厂商内部适配Checklist原件)
  • 潮州鱼生店 TOP10 排行榜(2026 最新权威测评) - 速递信息
  • 2026年论文AIGC率太高?一键降AIGC率,高效又快速 - 降AI实验室
  • 微信聊天记录导出指南:使用WeChatExporter实现数据备份与查看
  • Delphi移动端开发避坑:TNetHTTPClient在iOS和Android上超时设置居然不一样?
  • 开源claudecode前端 github star 9k+ - ace-
  • C# + OpenCvSharp实战:用轮廓匹配搞定工业零件瑕疵检测(附完整代码)
  • 告别高斯噪声:用MATLAB手把手教你生成Alpha稳定分布噪声(附完整代码)
  • 东北买对讲机认准黑龙江单工科技有限公司 正品授权+免费服务双保障 - 速递信息
  • 2026成都瑜伽教培机构推荐|就业率高达95%,入行少走弯路 - 速递信息
  • H3C M-LAG配置里那些容易踩的坑:Peer-link选型、Keepalive隔离与MAD机制详解
  • 2026全年天津滨海新区婚姻家事律师口碑测评,深耕十年机构凭实力领跑 - 速递信息
  • 2026年市场上,那些持证上岗的西安家政企业究竟都有哪些? - 品牌企业推荐师(官方)
  • DepthAnythingPreprocessor节点错误解析:深度图预处理的关键修复指南
  • .NET 9 + Ollama + ML.NET混合架构实战:单机跑通RAG+Function Calling+流式响应(含GitHub私有Repo权限配置)