Skip to content

v3.12.0 — P1 正确性加固批次

Choose a tag to compare

@thinkgin thinkgin released this 31 May 13:05
· 4 commits to v3.0 since this release

本版本为 P1 正确性加固批次:修复熔断器并发/低流量缺陷、缓存击穿与 goroutine 泄漏,并消除多处文档与代码不一致。

✨ 新增

  • 熔断器 MinRequests 配置:样本数达到 MinRequests 且错误率超阈值即可熔断,无需填满整个滑动窗口。默认 10,为 0 时回退为 WindowSize(向后兼容)。解决低流量接口永不熔断问题。

🐛 修复

  • 熔断器 HalfOpen 并发准入竞态allow() 在准入时即占用试探配额,不再等到 record() 计数,杜绝高并发下超过 HalfOpenMaxRequests 的请求涌入。
  • 缓存击穿MemoryStore / RedisStoreRemember 接入 singleflight,同 key 并发未命中合并为一次回源。
  • 内存缓存 goroutine 泄漏cache.NewStore / DefaultStore 的内存实现改为进程级共享单例,不再每次调用新起后台 GC goroutine。

🔧 变更

  • secure_headers:注释校准——默认不启用 CSP(与页面强相关),改为文档化按需配置方式。
  • gzip:落实跳过 SSE(text/event-stream)与已编码响应;移除未实现的 minSize 死注释。
  • validation:字段错误名改用真实 json tag(支持 snake_case)。
  • golang.org/x/sync 提升为直接依赖。

全量测试通过(20 包),并发测试 -count=5 稳定。完整记录见 CHANGELOG.md