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

go结构体优化

原结构package trainworddto import gitee.com/gowebframe3/webframe.git/goconfig/base/basedto type TrainWordResult struct { basedto.BaseEntity LastWords []*TrainDetail json:lastWords // 上一次训练所有单词列表, 用于筛查复习 PreWords []*TrainDetail json:prevWords // 本次组前暴增的单词结果 Mode6 []*TrainDetail json:mode6 // 模式6 , 速记 结果 Mode3 [][]*TrainDetail json:mode3 // 模式3 , 2选1 结果 Mode4 [][]*TrainDetail json:mode4 // 模式4 , 3选1 结果 Mode5 [][]*TrainDetail json:mode5 // 模式5 , 闪现模式 结果 } func NewTrainWordResult() *TrainWordResult { return TrainWordResult{} } func (self *TrainWordResult) AutoInit() bool { return true } func (self *TrainWordResult) Init() { self.LastWords make([]*TrainDetail, 0) self.PreWords make([]*TrainDetail, 0) self.Mode6 make([]*TrainDetail, 0) self.Mode3 make([][]*TrainDetail, 0) self.Mode4 make([][]*TrainDetail, 0) self.Mode5 make([][]*TrainDetail, 0) } func (self *TrainWordResult) InitDemo() *TrainWordResult { self.LastWords append(self.LastWords, TrainDetail{}) self.PreWords append(self.PreWords, TrainDetail{}) self.Mode6 append(self.Mode6, TrainDetail{}) return self } type TrainDetail struct { basedto.BaseEntity Idx int64 json:idx gorm:- // 训练单词/元素索引 Id int64 json:id // 单词/句子Id WordId 为句子ID Word string json:word // 单词 UseTime int json:useTime // 提交用时 毫秒 Passed bool json:result // 结果, 0 未掌握 , 1 已掌握 SelectId string json:selectId // 选择的选项ID //ClickIds []string json:clickIds // 点击的单词ID列表,记录每一次点击ID //PassIds []string json:passIds // 通过的单词ID列表,记录选对的单词ID //FailedIds []string json:failedIds // 失败的单词ID列表,记录选错的单词ID } func NewTrainDetail() *TrainDetail { return TrainDetail{} } func (self *TrainDetail) Init() { }优化1. 命名语义化优化 模式字段命名不够清晰建议使用更具语义的名称 go type TrainWordResult struct { basedto.BaseEntity LastWords []*TrainDetail json:lastWords // 上一次训练单词列表 PreWords []*TrainDetail json:prevWords // 本次组前暴增的单词结果 QuickMemo []*TrainDetail json:quickMemo // 速记模式结果 (原Mode6) Choice2 [][]*TrainDetail json:choice2 // 2选1模式结果 (原Mode3) Choice3 [][]*TrainDetail json:choice3 // 3选1模式结果 (原Mode4) FlashMode [][]*TrainDetail json:flashMode // 闪现模式结果 (原Mode5) } 2. 字段类型与命名一致性优化 TrainDetail 结构体存在几个可改进点 go type TrainDetail struct { basedto.BaseEntity Index int64 json:index gorm:- // 训练索引语义更清晰 WordID int64 json:wordId // 单词/句子ID命名更规范 Word string json:word // 单词内容 DurationMs int json:durationMs // 答题用时(毫秒)命名更精准 Passed bool json:passed // 结果一致性字段名与json tag一致 SelectedID int64 json:selectedId // 选择的选项ID统一为int64类型 } 优化理由 Idx → Index更符合Go命名习惯 Id → WordID明确表示是单词ID UseTime → DurationMs更精准表达含义 SelectId → SelectedID语义更清晰且ID通常为int64而非string 3. 初始化优化 构造函数直接初始化切片避免重复调用 Init() go func NewTrainWordResult() *TrainWordResult { return TrainWordResult{ LastWords: make([]*TrainDetail, 0), PreWords: make([]*TrainDetail, 0), QuickMemo: make([]*TrainDetail, 0), Choice2: make([][]*TrainDetail, 0), Choice3: make([][]*TrainDetail, 0), FlashMode: make([][]*TrainDetail, 0), } } 4. 类型别名优化可选 如果需要处理大量训练数据可以定义类型别名提高代码复用性 go // 类型别名提高可读性和复用性 type TrainDetailList []*TrainDetail type TrainDetailMatrix [][]*TrainDetail type TrainWordResult struct { basedto.BaseEntity LastWords TrainDetailList json:lastWords PreWords TrainDetailList json:prevWords QuickMemo TrainDetailList json:quickMemo Choice2 TrainDetailMatrix json:choice2 Choice3 TrainDetailMatrix json:choice3 FlashMode TrainDetailMatrix json:flashMode } 5. 并发安全优化如果需要 如果涉及并发写入可以考虑添加互斥锁 go import sync type TrainWordResult struct { basedto.BaseEntity mu sync.RWMutex LastWords []*TrainDetail // ... 其他字段 } func (t *TrainWordResult) AppendLastWord(detail *TrainDetail) { t.mu.Lock() defer t.mu.Unlock() t.LastWords append(t.LastWords, detail) } 6. 完整优化后代码 go package trainworddto import gitee.com/gowebframe3/webframe.git/goconfig/base/basedto // TrainWordResult 训练结果集合 type TrainWordResult struct { basedto.BaseEntity LastWords []*TrainDetail json:lastWords // 上一次训练单词列表 PreWords []*TrainDetail json:prevWords // 本次组前暴增的单词结果 QuickMemo []*TrainDetail json:quickMemo // 速记模式结果 Choice2 [][]*TrainDetail json:choice2 // 2选1模式结果 Choice3 [][]*TrainDetail json:choice3 // 3选1模式结果 FlashMode [][]*TrainDetail json:flashMode // 闪现模式结果 } // NewTrainWordResult 创建训练结果实例直接初始化 func NewTrainWordResult() *TrainWordResult { return TrainWordResult{ LastWords: make([]*TrainDetail, 0), PreWords: make([]*TrainDetail, 0), QuickMemo: make([]*TrainDetail, 0), Choice2: make([][]*TrainDetail, 0), Choice3: make([][]*TrainDetail, 0), FlashMode: make([][]*TrainDetail, 0), } } // TrainDetail 单个训练详情 type TrainDetail struct { basedto.BaseEntity Index int64 json:index gorm:- // 训练索引 WordID int64 json:wordId // 单词/句子ID Word string json:word // 单词内容 DurationMs int json:durationMs // 答题用时(毫秒) Passed bool json:passed // 是否通过 SelectedID int64 json:selectedId // 选择的选项ID } // NewTrainDetail 创建训练详情实例 func NewTrainDetail() *TrainDetail { return TrainDetail{} } 总结优化要点 优化项 原代码 优化后 理由 模式命名 Mode3/Mode4/Mode5/Mode6 Choice2/Choice3/FlashMode/QuickMemo 语义更清晰 ID类型 SelectId string SelectedID int64 ID通常为数字类型 字段命名 UseTime DurationMs 表达更精准 初始化 单独Init()方法 构造函数直接初始化 简洁高效 一致性 Passed json:result Passed json:passed 字段名与tag一致 根据你的业务需求选择适合的优化方案。如果只是简单的数据传输对象优化1-3项即可如果涉及复杂的并发场景或大量数据处理可以考虑4-5项。
http://www.zskr.cn/news/1326236.html

相关文章:

  • 告别CAD和Revit!用MagicPipe3D一键把二维管网图转成3D Tiles模型(附完整流程)
  • 从理论到实战:剖析7种主流分布式事务方案的选型与落地
  • Kerberos实战部署与核心命令全解析(从零到精通)
  • ARM Cortex-A57处理器错误解析与解决方案
  • 物联网平台融资潮解析:从资本流向看行业技术演进与未来格局
  • STM32 SPI驱动W25Q128 Flash避坑指南:CubeMX配置与轮询读写实战
  • Batch Norm实战解析:从理论到代码的平滑过渡
  • 从零到一:Virtualenv核心命令全解与实战场景指南
  • 深入RISC-V调试模块:从硬件设计视角理解DM、DMI与抽象命令的实现
  • 嘉立创EDA专业版安装避坑指南:从下载到第一个ESP32原理图(附免费打板尺寸)
  • 告别传统预处理!用FFT-RadNet直接处理高清雷达原始数据,实现多任务感知(附RADIal数据集实战)
  • 从A*到ECBS:多机器人路径规划的核心算法演进与实战解析
  • 不止于安装:用Docker在5分钟内快速搭建可复用的ROS Noetic开发环境
  • 避坑指南:在Vue2项目里用AntV X6,我踩过的这些‘坑’你一定要知道
  • 从伺服电机到总线端子:手把手教你用EtherCAT搭建一个简易的‘两轴’运动控制Demo
  • 深入解析RISC-V CLINT:多核中断与定时器编程实战
  • SimVision波形分析实战:从NC-Verilog仿真结果中快速定位Bug的5个技巧
  • 基于MYC-Y6ULX-V2核心板的工业运动控制系统实践
  • Sourcetree新手指南:从零配置到高效版本控制
  • 忆阻器混沌电路设计与储层计算应用
  • 【PSCAD与MATLAB协同仿真】三相故障行波提取与测距全流程解析
  • Perplexity文献综述生成的“黑箱”终于被拆解:LLM注意力热力图+参考文献可信度评分模型(GitHub Star 2.4k开源工具实测)
  • 用NE555和运放搭个“乐高”:从1kHz方波到奇次谐波合成的完整电路实验
  • 2026年口碑好的温室大棚配件/温室大棚/云南玻璃温室大棚横向对比厂家推荐 - 品牌宣传支持者
  • 工业级RK3399K核心板深度解析:宽温设计、AI加速与嵌入式开发实战
  • 第三章 WXML 表单组件全览与实战
  • 手把手教你搞定KEIL4.74社区版激活:从注册到填问卷拿License的全流程避坑
  • 39. UE5 GAS RPG:利用Motion Warping实现技能释放时的智能角色转向
  • LangChain-Chatchat 开发与应用(六) Agent能力揭秘-让大模型不仅能聊天还能干活
  • VCSA底层网络配置实战:从IP修改到SSH登录的运维指南