news 2026/5/5 11:44:26

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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() }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/5 11:42:49

5个超实用技巧:让JPEGView成为你Windows上最高效的图像查看器

5个超实用技巧:让JPEGView成为你Windows上最高效的图像查看器 【免费下载链接】jpegview Fork of JPEGView by David Kleiner - fast and highly configurable viewer/editor for JPEG, BMP, PNG, WEBP, TGA, GIF and TIFF images with a minimal GUI. Basic on-the…

作者头像 李华
网站建设 2026/5/5 11:41:06

使用 TaoToken CLI 工具一键配置团队开发环境中的大模型接入点

使用 TaoToken CLI 工具一键配置团队开发环境中的大模型接入点 1. 安装 TaoToken CLI 工具 TaoToken CLI 提供两种安装方式,适合不同使用场景。对于需要频繁切换配置的团队环境,推荐全局安装: npm install -g taotoken/taotoken若仅需临时…

作者头像 李华
网站建设 2026/5/5 11:40:31

从开发到部署:基于快马平台打造企业级esp8266物联网监控系统

从开发到部署:基于快马平台打造企业级esp8266物联网监控系统 最近在做一个农业大棚监控项目,需要实时采集环境数据并远程监控。经过对比选择了ESP8266作为主控芯片,配合InsCode(快马)平台的一键部署功能,整个开发过程变得异常顺畅…

作者头像 李华
网站建设 2026/5/5 11:39:41

如何用WaveTools让《鸣潮》体验提升三个档次

如何用WaveTools让《鸣潮》体验提升三个档次 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 你是否曾经在《鸣潮》的世界中遇到过这样的困扰:明明电脑配置不错,游戏却总是卡顿掉帧&…

作者头像 李华