我开源了一个 Go 后端脚手架:Gin + GORM + Redis + JWT + Lua 限流

65 阅读2分钟

最近我把自己在项目里长期使用的一套 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,一起把它打磨得更实用。