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

从目录分层到交付验证:我的 Go 后端工程实践

写 Go 项目,最头疼的事情不是语法——语法一天就能上手。真正让人纠结的是"代码往哪放"。

Go 官方不像 Rails 或 Django 那样给你规定目录结构。你搜"Go project layout",能搜出来一堆方案,什么 golang-standards/project-layout、clean architecture、hexagonal architecture……每个都有道理,但每个都不能直接拿来就用。

我也纠结过一阵。最早写 Go 就一个main.go打天下,后来项目大了开始拆文件夹,拆的过程中踩了不少坑——层太多了写起来烦,层太少了改起来痛。折腾了几个项目之后,慢慢沉淀出一套自己用着顺手的结构。

不敢说这是最优解,但至少是在实际项目里磨合过的。这篇就聊聊这套结构长什么样,以及每个设计决策背后的想法。

整体目录结构

先把全貌亮出来:

cmd/ api/ API 服务入口 worker/ 异步队列消费者入口 migrate/ 数据库迁移入口 config/ 环境变量加载与类型化配置 internal/ server.go HTTP 服务装配 worker.go Worker 服务装配 bootstrap/ 进程级资源初始化和关闭 errcode/ 错误码定义 handler/ HTTP handler service/ 业务逻辑 repository/ 数据访问层 model/ 数据模型 middleware/ Gin 中间件 router/ 路由注册 task/ 异步任务定义 taskqueue/ 异步队列边界 worker/ 异步队列运行时组件 pkg/ auth/ JWT 鉴权 cache/ Redis 封装 database/ 数据库初始化 log/ 日志初始化 response/ 统一 JSON 响应 validator/ 参数校验 tests/ integration/ PostgreSQL、Redis、Asynq 集成测试 .github/ workflows/ ci.yml 自动化测试、lint 和容器验证 Dockerfile 三个进程入口的多阶段镜像构建 .dockerignore Docker 构建上下文排除规则 compose.yaml 本地完整依赖栈与启动顺序 Makefile 开发、验证和容器命令入口

几个顶层目录的职责:

  • cmd/:进程入口。每种进程一个子目录,main.go只负责进程级编排:API 和 Worker 管理启动与关闭,Migrate 执行一次性迁移后退出
  • config/:只负责从环境变量加载类型化配置,不在这里创建数据库、Redis 或 JWT
  • internal/bootstrap/:初始化 API 和 Worker 的共享进程资源,组装 Registry,并统一负责关闭;Migrate 作为一次性入口直接管理自己的数据库连接
  • internal/:模块私有的应用代码、进程装配和运行时组件。Go 的internal约定保证这些包不会被外部项目直接引用
  • pkg/:基础设施辅助包。大部分保持业务无关,少数包(例如统一响应)仍服务于当前应用契约
  • tests/integration/:连接真实 PostgreSQL 和 Redis,并通过 Asynq client 验证任务持久化;使用独立 build tag 与默认单元测试隔离
  • 根目录工程文件Dockerfile、Compose、Makefile和 GitHub Actions 共同负责本地运行、构建与自动化验证,不承载业务逻辑

这不是照搬 golang-standards/project-layout。那个仓库里有些目录我觉得没必要(比如api/third_party/),有些是我后来根据实际需要加的(比如拆了三个 cmd)。项目结构这种东西,合适比"标准"重要。

http://www.jsqmd.com/news/1209469/

相关文章:

  • 2026指南:小空间扩容与橱柜翻新专业品牌机构解析 - 甄选服务推荐
  • 二战考生想拔高,粉笔该怎么搭配专项和模考
  • 2026年7月最新亨得利官方服务项目及价格查询|网点地址与服务电话权威信息公告 - 亨得利官方
  • 成都专科学校排名:榜单参考、择校避坑与数智化实训就业升本优势 - 行业洞察分析师
  • 实战指南:Realtek 8192FU Linux驱动终极方案,让老旧USB网卡重获新生
  • 智能电网巡检电力设施及缺陷检测数据集电力设施检测、电力缺陷检测、绝缘子检测、输电线路巡检、无人机电力巡检、变电站设备检测、YOLO 电力数据集、VOC 电力数据集、电力目标检测
  • 具有量子态操纵的稳固单电子存储器研发进展与展望!
  • 2026年内蒙古恒压变频供水设备与消防稳压装置供应厂家实力解析 - 甄选服务推荐
  • 2026年7月最新亨得利官方服务项目及价格查询|完整网点地址及热线权威信息通告 - 亨得利官方
  • 宇舶中国官方售后服务中心|服务电话及全部维修地址权威信息声明(2026年7月最新) - 亨得利官方服务中心
  • NocoDB字段级数据加密实战:基于安全代理的透明化解决方案
  • 鸿蒙 ArkTS 实战:Work Order Dispatch 从业务记录到移动工作台完整解析
  • GitHub中文化插件:3分钟让GitHub界面说中文的终极指南
  • 6 类细分场景在线投票工具,微信小程序亲测测评精准匹配对应评选需求
  • OpenStack Keystone手动安装与身份治理原理详解
  • 2026年7月最新宝珀呼和浩特玉泉万达广场维修保养服务电话 - 宝珀官方售后服务中心
  • 成都专科优质宿舍:房型配套完善,含产教实训与多元升学就业优势 - 行业洞察分析师
  • 5分钟极速汉化Figma:设计师必备的中文界面解决方案
  • Microsoft Edge 每次启动都出现“用户配置 1”?删除后仍自动创建的解决办法
  • RAG技术完整学习笔记:从0到1搭建生产级系统
  • 2026年7月知名的边坡绿化服务商推荐,草原网/被动边坡防护网/防撞围栏/声屏障/定制围栏,边坡绿化工程公司怎么选择 - 品牌推荐师
  • AI终端国标首次发榜:全部L3,没有L4,这才是最值得关注的信号
  • 智能化巡检无人机航拍道路数据集、6类路面损伤数据集、YOLO道路检测数据集道路损伤检测、路面裂缝识别、无人机道路巡检、公路病害检测、横向裂缝、纵向裂缝、斜向裂缝、路面龟裂、道路坑洞、路面修补检测
  • 争夺注意力:视觉复杂性在竞争性亲社会众筹平台中的作用
  • 【日报】7月16日 · 韩国8800亿美元砸向AI和机器人
  • 格拉苏蒂中国官方售后服务中心|服务电话及24小时维修地址权威信息公告(2026年7月最新) - 亨得利钟表维修中心
  • 2026年10款企业No Code应用工具盘点选择指南
  • 天梭中国官方售后服务中心|最新地址及官方服务热线权威信息公告(2026年7月最新) - 天梭服务中心
  • 成都专科专业有哪些?含教育管理科技附就业升学择校指南 - 行业洞察分析师
  • 鸿蒙HarmonyOS 多模态输入实战 —— 图片与文档输入智谱/DeepSeek