v3.1.0 Production Ready · 基于 Gin 1.12 构建

The Go framework
built for serious systems.

ThinkGin 基于 Gin 构建,把配置、日志、监控、链路追踪与优雅停机收进一套统一秩序。性能是门槛,秩序才是护城河。

go run main.go  ·  Listening on :8000
~/thinkgin — zsh
$go run main.go
[GIN-debug] GET / --> thinkgin/app/index/controller.Hello [GIN-debug] GET /index/hello --> thinkgin/app/index/controller.Hello [GIN-debug] GET /metrics --> prometheus.Handler [GIN-debug] GET /livez --> kubernetes.Probe [GIN-debug] GET /readyz --> readyz (probes DB + Redis) [GIN-debug] POST /api/v1/login --> JWTIssue [GIN-debug] GET /api/v1/me --> JWTAuth + SessionMiddleware session driver = memory · tracer = otlp framework initialized · shutdown timeout = 10s Listening and serving HTTP on :8000
$
Version
3.1.0
Session + JWT + 探针零依赖启动
Runtime
Go 1.25+
对齐 Gin 1.12 与最新 标准库
Config
YAML
模块化配置,多环境部署
Shutdown
10s
优雅停机超时,面向生产

性能之外,真正让系统可维护的能力。

一个框架是否值得投入,不在它能不能跑 benchmark,而在它能不能在三年后依然被团队维护、被 SRE 监控、被新人看懂。

Gin-powered 路由

保留 Gin 的高性能 HTTP 路由,并在其上建立统一的中间件、上下文与生命周期模型。

模块化 YAML 配置

app / server / database / log / prometheus 各司其职,不再把设置挤进同一个巨大的配置文件。

结构化日志

基于 Logrus 的 JSON / Text 双格式输出,字段化记录、自动切割、按环境差异化配置。

Prometheus 监控

HTTP 指标、系统指标、业务指标三件套,scope / route 标签让 label 不会爆炸。

分布式追踪

Jaeger / Zipkin / OpenTelemetry 原生集成,跨服务链路一目了然。

优雅停机 & 真实探针

/livez 仅验证进程存活,/readyz 并发 Ping DB / Redis,任一依赖不可达返 503。

JWT + Session

HS256 签发与校验,严格拒绝 alg=none;Session 自带 memory / redis 双 driver, Cookie 安全标志自动透传。

脚手架 CLI

go run ./cmd/scaffold new module user 一条命令生成 controller / model / view,取代重复手工创建文件的仪式感。

零依赖启动

默认配置不预置任何真实连接,go run main.go 立即摆手;需要 DB / Redis 时从配置文件注释块按需放开。

从请求进入,到服务退出,链路始终可解释。

Route 负责入口,Middleware 处理横切,Controller 保持轻薄,业务沉在 Model / Service。外层由配置和可观测性统一治理。

分层,是为了让秩序被看见。

不是纸面架构,而是真正把关注点分开:每一层都能被独立替换、独立测试、独立观测。

Router Middleware Controller Model Prometheus Graceful Shutdown
01
HTTP Request → Router

请求进入 Gin 路由层,完成路径匹配与上下文构建。

entry
02
Middleware

处理日志、安全、限流、追踪等横切关注点。

cross
03
Controller → Model

控制器保持轻薄,业务与数据访问沉淀到服务层。

core
04
Response → Graceful Shutdown

统一输出响应,借助上下文与超时完成优雅退出。

exit
thinkgin / main.go Real Entry
// 真实的服务启动入口
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)
}

准备好把它用在你的下一个生产服务里。

十秒上手示例、模块化配置、监控与部署方案,一份文档让你看见 ThinkGin 如何被设计、被组装、被交付到线上。