v1.1.0
v1.1.0 — HA & Manager 化
本版本定位为 HA & Manager 化 release:高可用与生产就绪改进 + 组件 Manager 化。对应体检报告 #10-#24。
⚠️ 含少量破坏性变更,升级前请阅读「升级说明」。
Breaking ⚠️
- 删除
wire包及WithWireOption(WithoutWire保留空 stub 兼容) - 删除
AppConfig.TokenExpire(与JWTConfig.Expire重复) JWTConfig.Expire由int(秒)改为time.Duration("24h")- 删除
StartServerWithPort与GracefulShutdown双轨函数
Added ✨
组件 Manager 化(#10)
storage / cache / redis / jwt / logger 五组件新增 XxxManager + DefaultXxx + SetDefaultXxxManager,包级 facade 保留兼容存量。支持多实例与测试注入 mock。
Lifecycle Hooks(#12)
WithHook(Hook{OnInit/OnStart/OnReady/OnStop}),覆盖 Init/启动/就绪/关闭各阶段。
App.Go + in-flight goroutine(#22)
App.Go(func(ctx)) 启动受管理的后台 goroutine,Shutdown 时 cancel + wg.Wait(带超时)。
Server 参数配置化(#13)
server 新增 read_timeout/write_timeout/idle_timeout/shutdown_timeout/max_header_bytes/tls/unix_socket/response_mode,支持 TLS 与 unix socket。
JWTConfig time.Duration(#14)
jwt.expire/refresh_expire 用 Duration("24h"/"168h"),新增 issuer/algorithm。
Config Validate(#16)
Config.Validate() 在 Manager.Load 后自动调用,启动期拦截非法配置。
response REST 模式(#15)
response.SetMode(ModeBusiness|ModeREST),默认兼容存量;ModeREST 按错误码映射 HTTP status。新增 response.Custom()。
livez / readyz(#17)
/livez(存活,始终 200)+ /readyz(就绪,依赖检查 503),K8s probe 友好。
Prometheus metrics(#18)
/metrics 端点 + middleware.Metrics() 采集 http_requests_total/http_request_duration_seconds/http_requests_in_flight。
请求级 Timeout 中间件(#19)
middleware.Timeout(d),下游走 c.Request.Context() 级联取消。
依赖健康自愈(#21)
主库后台探活 + replica 健康剔除,/readyz//health 联动 503。新增 conn_max_idle_time/health_check_interval/health_check_failure_threshold 配置。
RequestID 默认装入(#24)
App.Init 无条件装入 RequestID()(Recovery 前),响应/panic 日志均带 request_id。移除 gin.Recovery() 双重保险。
升级说明 🛠️
- wire 包删除:移除
wireimport 与wire.InitServices()/WithWire()调用。cache.Init()现由WithRedis自动触发。 - AppConfig.TokenExpire 删除:改用
jwt.expire。grep 清理token_expire。 - JWTConfig.Expire 类型变更:YAML
expire: 86400→expire: "24h";代码time.Duration(cfg.JWT.Expire) * time.Second→cfg.JWT.Expire。 - StartServerWithPort / GracefulShutdown 删除:改用
App.Run()/App.Shutdown()。 - JWT 密钥长度:Validate 要求启用 JWT 时 secret ≥32 字节,短密钥启动期被拦截。
- 配置文件:
jwt.expire必须改为 Duration 字符串;server.read_timeout等可选(缺省回退)。
升级命令:go get github.com/EthanCodeCraft/xlgo-core@v1.1.0
完整变更见 CHANGELOG.md。