Gin-powered 路由
保留 Gin 的高性能 HTTP 路由,并在其上建立统一的中间件、上下文与生命周期模型。
ThinkGin 基于 Gin 构建,把配置、日志、监控、链路追踪与优雅停机收进一套统一秩序。性能是门槛,秩序才是护城河。
一个框架是否值得投入,不在它能不能跑 benchmark,而在它能不能在三年后依然被团队维护、被 SRE 监控、被新人看懂。
保留 Gin 的高性能 HTTP 路由,并在其上建立统一的中间件、上下文与生命周期模型。
app / server / database / log / prometheus 各司其职,不再把设置挤进同一个巨大的配置文件。
基于 Logrus 的 JSON / Text 双格式输出,字段化记录、自动切割、按环境差异化配置。
HTTP 指标、系统指标、业务指标三件套,scope / route 标签让 label 不会爆炸。
Jaeger / Zipkin / OpenTelemetry 原生集成,跨服务链路一目了然。
默认 10s 优雅停机超时,配合 k8s livez / readyz 探针,生产发布不再踩坑。
Route 负责入口,Middleware 处理横切,Controller 保持轻薄,业务沉在 Model / Service。外层由配置和可观测性统一治理。
不是纸面架构,而是真正把关注点分开:每一层都能被独立替换、独立测试、独立观测。
请求进入 Gin 路由层,完成路径匹配与上下文构建。
处理日志、安全、限流、追踪等横切关注点。
控制器保持轻薄,业务与数据访问沉淀到服务层。
统一输出响应,借助上下文与超时完成优雅退出。
// 真实的服务启动入口 config := app.GetConfig() logger := app.GetLogger() appInstance, err := framework.New( framework.WithConfig(config), framework.WithLogger(logger), framework.WithShutdownTimeout(10*time.Second), ) if err != nil { logger.Fatalf("应用初始化失败: %v", err) } if err := appInstance.Run(ctx); err != nil { logger.Fatalf("服务运行失败: %v", err) }