最近我把自己在项目里长期使用的一套 Go 后端基础工程整理并开源了,项目名叫 GoFlow 。 目标很明确: 让后端项目从“能跑”升级到“可上线、可扩展、可维护” 。
仓库地址: github.com/daichongdev…
一、为什么要做这个项目?
日常开发中,经常会遇到这些问题:
- 项目初期迭代快,但越往后越难维护
- 没有统一错误码和响应格式,前后端协作成本高
- 缺少可落地的限流机制,高并发下容易被打穿
- 日志、认证、恢复、跨域等中间件每次都要重复造轮子
- 架构分层不清晰,改一个功能容易引发连锁影响 于是我把这些“生产环境必须有”的能力,统一沉淀成了这个脚手架。
二、项目解决了什么问题?
1)清晰分层架构
项目采用经典的:
Handler -> Service -> Repository
并通过 ServiceContext 做统一依赖注入,便于扩展和测试。
2)现代后端技术栈
- Gin:Web 框架
- GORM + MySQL:数据访问
- Redis:缓存与限流
- Zap:结构化日志
- Watermill:异步消息(Redis Streams / MySQL)
3)完整中间件体系
- RequestID(链路追踪)
- Logger(结构化日志)
- Recovery(异常恢复)
- CORS(跨域)
- I18n(国际化)
- JWT(用户端/管理端认证)
4)高并发可用的限流能力(重点)
内置 Redis Lua 限流器 ,支持按 IP + 路由 + 方法 限流,保证原子性。 示例策略:
- 商品列表接口: 1秒 1次
- 创建商品接口: 3秒 1次 相比只按 IP 限流,这种策略更精细,也更贴近业务需求。
三、我重点优化过的细节
日志系统稳定性
- 关键路径采用结构化日志,减少高并发下无效开销
- request_id 贯穿链路,排障效率更高
- 兼顾性能、可靠性、可观测性
限流系统可靠性
- Lua 脚本保证 Redis 操作原子性
- 限流 key 设计包含 method,避免 GET/POST 相互影响
- 支持 Retry-After 响应头,客户端退避更友好
四、适用场景
这个项目比较适合:
- 电商/内容/管理后台等 API 服务
- 需要 JWT 鉴权 + 限流 + 审计日志的系统
- 希望快速搭建“可上线”Go 后端工程的团队
- 想统一工程规范,减少重复造轮子的开发者
五、快速启动
git clone git@github.com:daichongdev/goFlow.git
cd goflow
go mod tidy
make run
健康检查:
curl http://localhost:8080/health
六、后续规划
- 支持滑动窗口 / 令牌桶限流策略
- 接入 Prometheus 指标监控
- 补充 OpenAPI / Swagger 文档
- 增加高并发压测基准
七、开源地址
GitHub: github.com/daichongdev…
如果这个项目对你有帮助,欢迎点个 ⭐ 支持一下。 也欢迎提 Issue / PR,一起把它打磨得更实用。