尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

从目录分层到交付验证:我的 Go 后端工程实践
📅 发布时间:2026/7/17 23:07:33

写 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)。项目结构这种东西,合适比"标准"重要。

相关新闻

  • 具有量子态操纵的稳固单电子存储器研发进展与展望!
  • OpenStack Keystone手动安装与身份治理原理详解
  • 2026年7月最新宝珀呼和浩特玉泉万达广场维修保养服务电话 - 宝珀官方售后服务中心

最新新闻

  • 2026广州漏水维修实用攻略|厨卫、阳台、外墙、屋顶与地下室处理|分场景维修与门店判断方法 - 盛隆防水
  • 原生木浆卷纸推荐:联盛森宝天然优选 - MXyuyu
  • SpringBoot+Vue反欺诈平台源码,带用户管理与音视频素材上传功能
  • 亨得利官方服务项目及价格查询|地址和维修热线权威信息通知(2026年7月最新) - 亨得利官方
  • Pocket-TTS与CALM:端侧CPU实时语音合成的范式突破
  • 必看使用误区梳理指南!赣州锌钢铝合金百叶窗厂家/通风防雨空调外机罩格栅网推荐锦锋诚瑞金龙南信丰大余上犹崇义安远定南全南宁都于都兴国会昌寻乌石城工程金属百叶大厂! - 奋斗者888

日新闻

  • 佛山青少年训练营推荐:军博营地实力顶尖 - 秋山寄远
  • 如何快速上手PvZ2 Gardendless:免费Web版植物大战僵尸2完整指南
  • jiuwen-deepsearch核心功能详解:规划-检索-反思三合一智能工作流

周新闻

  • IX9104 PCIe5.0 高速交换芯片@ACP#完整规格 + 应用场景总结
  • Unity游戏集成Coze智能体:实现NPC智能对话与知识库联动
  • SAP EPIC 建行回单查询:从标准类CL_EPIC_EXAMPLE_CN_CCB_GHTD到Z类的5处关键修改

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号