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

GO分层架构【2】使用GIN与GORM

现在大家都使用的的GIN和GORM开发架构是怎么样的目前在 Go 社区中基于 Gin 和 GORM 的主流微服务开发架构最推崇的是 “工程化分层”。它在你的基础上通过引入 Logic/Service 层 和 Repository 层彻底解决代码臃肿和难以测试的问题。以下是目前最流行的标准架构拆解1. 核心分层架构图数据流向遵循请求 → Handler → Logic → Repository → Database。internal/ ├── handler/ # (入口层) 负责 Gin 的参数绑定、简单校验、返回 JSON ├── logic/ # (业务层) 核心是大脑组合业务步骤不涉及具体 SQL ├── repository/ # (持久层) 只有这里出现 GORM负责具体的增删改查 ├── model/ # (模型层) 定义 GORM 结构体Table Schema └── middleware/ # (中间件) 权限校验、日志记录2. 各层代码示例以“用户充值”为例第一层model(定义表结构)package model type User struct { ID uint gorm:primaryKey Balance int64 gorm:column:balance // 余额 }第二层repository(数据操作 - 只有它认识 GORM)package repository import your-project/internal/model import gorm.io/gorm type UserRepo struct { db *gorm.DB } func (r *UserRepo) UpdateBalance(id uint, amount int64) error { // 纯粹的数据库操作 return r.db.Model(model.User{}).Where(id ?, id). Update(balance, gorm.Expr(balance ?, amount)).Error }第三层logic(业务核心 - 这里处理复杂逻辑)package logic import your-project/internal/repository type UserLogic struct { repo *repository.UserRepo } func (l *UserLogic) Recharge(userId uint, money int64) error { // 1. 这里处理业务规则比如充值不能小于 0 if money 0 { return errors.New(金额错误) } // 2. 调用数据层 return l.repo.UpdateBalance(userId, money) }第四层handler(Gin 入口 - 只管翻译)package handler import your-project/pkg/res // 你之前定义的统一返回 func RechargeHandler(c *gin.Context) { var req struct { UserId uint; Amount int64 } c.ShouldBindJSON(req) // 参数解析 // 调用 Logic 层 err : logic.NewUserLogic().Recharge(req.UserId, req.Amount) if err ! nil { c.JSON(200, res.Error(500, err.Error())) return } c.JSON(200, res.Success(nil)) // 统一格式返回 }3. 为什么这是主流GORM 不外溢GORM 的代码只出现在repository或infra。如果你哪天想换sqlx或ent只需要改底层不需要动logic和handler。Logic 层可复用API 调用通过handler调logic。定时任务通过cron调logic。自检脚本通过test/client调logic。并发安全与事务主流做法是在logic层通过闭包或 Context 处理事务确保业务的原子性。4. 针对你现状的调整建议将infra细化你现在的infra可能只是初始化 DB 连接。建议在infra下建一个repository子目录专门写 GORM 的查询。增加logic文件夹把你handler里那些复杂的if-else、计算、多步 SQL 写入全部挪到logic里。统一返回继续使用你放在pkg/res下的结构体这是非常地道的做法。避坑指南在 GORM 开发中千万不要把*gin.Context传进logic层或数据库层这会导致你的业务逻辑和 HTTP 框架死死锁定。

相关文章:

GO分层架构【2】使用GIN与GORM

现在大家都使用的的GIN和GORM开发架构是怎么样的?目前在 Go 社区中,基于 Gin 和 GORM 的主流微服务开发架构,最推崇的是 “工程化分层”。它在你的基础上,通过引入 Logic/Service 层 和 Repository 层,彻底解决代码臃肿…...

AI万能指令

目录 1. 写作/文案/总结万能指令(文笔能力) 2. 代码生成 自动查错(代码能力) 3. 长文档/论文/报告一键总结(总结能力) 4. 超强逻辑推理(数学/难题/分析) 5. 复杂表格/截图转文…...

MCP 协议深度解析:构建 AI Agent 的标准化上下文连接器

MCP 协议深度解析:构建 AI Agent 的标准化上下文连接器 摘要 随着大语言模型(LLM)能力的提升,AI Agent 逐渐从简单的聊天机器人演变为能够操作外部工具、访问私有数据、执行复杂逻辑的智能体。然而,如何标准化地让不同…...

容器网络权限失控正在吞噬你的K8s集群!Docker 27策略升级倒计时——仅剩90天兼容期(附迁移评估工具)

第一章:容器网络权限失控的现实危机与Docker 27策略升级紧迫性 近年来,多起生产环境安全事件溯源显示,攻击者常利用 Docker 默认网络模型中的权限隐含缺陷实施横向移动:容器间无默认隔离、共享主机网络命名空间、bridge 网络下容器…...

伏格尔法与匈牙利法

1.伏格尔法多用于运输问题,多对多关系,也称差值法,本质就是当不能用最小代价解决问题就尝试用次小代价解决问题; 2.匈牙利法多用于指派问题,一对一关系; 题一 如何解答该题呢? 1.首先找出每行每列的最小值和次小值,然后用次小值减去最小值作为行差或者列差; 测试甲…...

2026届最火的五大AI辅助论文工具横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 深度学习与自然语言处理技术所构成的AI写作工具,能依据用户输入,于数…...

Bili2text:告别手动记录,3步将B站视频秒变文字稿

Bili2text:告别手动记录,3步将B站视频秒变文字稿 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为B站视频的精彩内容无法快速记录…...

MIUI自动化任务工具:3步告别繁琐社区签到,每天节省15分钟

MIUI自动化任务工具:3步告别繁琐社区签到,每天节省15分钟 【免费下载链接】miui-auto-tasks 一个自动化完成小米社区任务的脚本 项目地址: https://gitcode.com/gh_mirrors/mi/miui-auto-tasks 还在为每天手动登录小米社区签到、完成任务而烦恼吗…...

阿里云 AgentRun 能力升级:支持 Skills 安全托管,千种技能一键直达!

引言:当 Skill 成为 Agent 时代的硬通货万万没想到,如今 Skill 正在成为 AI Agent 时代的硬通货。最近,GitHub 上一个叫"同事.skill"的项目,5 天拿下超 6600 个 star,直接冲上全网热搜。随后,&qu…...

如何严控进度成本,做实项目精细化管理?

项目做着做着就延期、预算算着算着就超支、人力物力投入越来越多,最终项目利润却大打折扣,甚至出现亏损,这是无数企业项目管理中的常态。很多企业明明制定了详细的进度计划、成本预算,可执行过程中完全失控,事后复盘找…...

告别调参烦恼!用扩张状态观测器(ESO)实现永磁同步电机无模型预测控制(MFPC)的Simulink仿真指南

永磁同步电机无模型预测控制实战:基于ESO的Simulink仿真指南 电机控制工程师们常常陷入参数辨识和PI调节的泥潭——电阻、电感、磁链的微小变化就能让精心设计的控制器性能骤降。有没有一种方法能跳出这个循环?扩张状态观测器(ESO&#xff0…...

NocoBase 一周更新:多版本推新特性、优化功能并修复多项问题

NocoBase 目前更新的版本分支NocoBase 目前更新包括的版本更新包括三个分支:main ,next 和 develop 。main 是截止目前最稳定的版本,推荐安装此版本;next 包含即将发布的新功能,经过初步测试,可能存在部分已…...

从Google搜索到ChatGPT:知识图谱是如何让AI‘更懂你’的?聊聊它的现在与未来

知识图谱:AI认知革命的隐形引擎 十年前,我们在Google搜索"苹果",结果页面上堆满了水果种植指南和苹果公司的新闻稿;今天,同样的搜索会智能区分水果与科技公司,甚至直接展示iPhone新品参数对比。…...

Windows优化工具深度评测:告别卡顿,一键提升系统性能

Windows优化工具深度评测:告别卡顿,一键提升系统性能 【免费下载链接】winutil Chris Titus Techs Windows Utility - Install Programs, Tweaks, Fixes, and Updates 项目地址: https://gitcode.com/GitHub_Trending/wi/winutil 你是否也曾经历过…...

AZ音乐下载器完整使用攻略:三步搞定高品质音乐下载

AZ音乐下载器完整使用攻略:三步搞定高品质音乐下载 【免费下载链接】AZMusicDownloader AZ音乐下载器 - 优雅地下载音乐 - 多API集成客户端 | Download music gracefully 项目地址: https://gitcode.com/gh_mirrors/az/AZMusicDownloader 你是否经常为找不到…...

MCP41010数字电位器实战指南:从SPI到SGM2211调压

目录 一、MCP41010 芯片定位:最简单的 SPI 数字电位器 核心参数(记住就够用) 二、引脚功能彻底吃透(8 脚 SOIC/SOT23) 3 个模拟端(最重要) 三、工作原理:把它当普通电位器用 四…...

QModMaster:如何用开源方案解决工业ModBus通信的三大技术挑战

QModMaster:如何用开源方案解决工业ModBus通信的三大技术挑战 【免费下载链接】qModbusMaster Fork of QModMaster (https://sourceforge.net/p/qmodmaster/code/ci/default/tree/) 项目地址: https://gitcode.com/gh_mirrors/qm/qModbusMaster 在工业自动化…...

手把手教你理解ARM SoC中的PPU:电源管理IP的配置与实战避坑指南

手把手教你理解ARM SoC中的PPU:电源管理IP的配置与实战避坑指南 在低功耗SoC设计中,电源管理单元(PPU)扮演着至关重要的角色。作为连接系统控制器与设备电源状态的桥梁,PPU的配置直接影响着芯片的功耗表现和功能稳定性…...

Cursor Free VIP:突破AI编程工具限制的技术方案与实现原理

Cursor Free VIP:突破AI编程工具限制的技术方案与实现原理 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your…...

多轮对话时,RAG反复做重复召回,模型层与Milvus层分别如何解决?

做 RAG 的团队,基本都会在多轮对话上吃过亏。 前几轮还表现不错,到了第四、五轮,AI 开始重复自己的历史回答内容。比如用户追问细节,系统把已经给过的段落又搜了一遍,换个说法再输出一遍。 其实,这其中的…...

车载开发团队最后窗口期:VSCode 2026正式版适配截止日倒计时47天——附官方未公开的CI/CD车载流水线模板

更多请点击: https://intelliparadigm.com 第一章:VSCode 2026车载开发适配的战略紧迫性与窗口期定义 随着ISO 21434网络安全流程全面落地及AUTOSAR Adaptive Platform R24-11的强制部署节点临近,车载软件开发工具链正面临代际跃迁。VSCode …...

Valorant DirectX 11崩溃稳定教程:更新后闪退进不去?

每次大版本更新后,总有一批玩家会遇到闪退进不去游戏的情况。这并非个例,通常是因为新版本的游戏客户端对系统环境提出了新的要求,或者更新包与当前驱动、反作弊模块产生了兼容性摩擦。解决更新后闪退的核心思路是:先让新文件和旧…...

工控主机在机器人应用中的常见问题及解决办法

今天阿强给大家分享下工控主机在机器人应用中的常见问题及解决办法。处理过无数个工控主机在机器人应用中的故障问题。很多时候,机器人出现故障并不是因为机器人本身的问题,而是因为工控主机出现了问题。下面我就给大家总结一下工控主机在机器人应用中的…...

IC618环境下EMX 5.7保姆级安装与破解指南(附Virtuoso内嵌避坑点)

IC618与EMX 5.7深度集成实战:从安装到电感仿真的全链路指南 在半导体设计领域,电感器件的精确仿真一直是射频集成电路(RFIC)设计中的关键挑战。传统方法往往需要依赖第三方工具进行数据交换,不仅效率低下,还…...

BilibiliDown:5分钟学会跨平台B站视频下载

BilibiliDown:5分钟学会跨平台B站视频下载 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/BilibiliD…...

Cloudflare DDNS脚本踩坑记:从API调用失败到成功解析,我总结了这5个关键点(Linux/Windows双平台)

Cloudflare DDNS实战指南:跨越Linux与Windows的5个技术深坑 深夜两点,服务器监控突然报警——我的个人网站无法访问了。检查后发现是家庭宽带IP变更导致DNS解析失效,这已经是本月第三次。作为一名需要24小时在线的开发者,我决定彻…...

告别C盘爆红!手把手教你用LxRunOffline把WSL2迁移到D盘(附下载与命令详解)

WSL2磁盘空间优化实战:从C盘迁移到D盘的完整指南 你是否曾经打开文件资源管理器,看到C盘那刺眼的红色警告而心头一紧?对于使用WSL2进行开发的Windows用户来说,这个问题尤为常见。默认安装位置让Linux子系统不断蚕食宝贵的系统盘空…...

终极指南:一键重置Navicat Premium试用期的完整解决方案

终极指南:一键重置Navicat Premium试用期的完整解决方案 【免费下载链接】navicat-premium-reset-trial Reset macOS Navicat Premium 15/16/17 app remaining trial days 项目地址: https://gitcode.com/gh_mirrors/na/navicat-premium-reset-trial Navicat…...

【异常】Coze请求业务服务提示[720712044] 请求http 失败,err:Get “https://xxxx/deviceMac=“: Origin DNS Error

一、报错内容 二、报错说明 核心根因是「Origin DNS Error 源站域名DNS解析失败」,导致Coze的HTTP请求在发起阶段就彻底失败,无法获取到目标地址的任何内容,进而引发后续的网页解析失败;同时目标URL本身存在必填参数缺失、接口类型不匹配的问题,会进一步导致请求无法正常…...

别再只用Matplotlib了!科研论文配图,试试这3个更优雅的Python库(附代码对比)

科研论文配图进阶指南:超越Matplotlib的三大优雅选择 当你在深夜修改论文第N稿时,是否曾被审稿人那句"Figures need improvement"刺痛过?科研图表不仅是数据的载体,更是学术表达的视觉语言。Matplotlib作为Python绘图的…...