跳转到内容

宣布 Gin 1.12.0:BSON 支持、Context 改进、性能提升及更多功能

Gin v1.12.0 已正式发布

我们荣幸地宣布 Gin v1.12.0 的发布,它包含新功能、显著的性能改进和一系列错误修复。此版本加深了 Gin 对现代协议的支持,完善了开发者体验,并延续了项目保持快速和轻量级的传统。

🌟 主要功能

  • **BSON 协议支持:**渲染层现已支持 BSON 编码,为更高效的二进制数据交换打开了大门 (#4145)。

  • **新的 Context 方法:**两个新的辅助方法使错误处理更加清晰和符合习惯:

    • GetErrorGetErrorSlice 用于从 context 中类型安全地检索错误 (#4502)
    • Delete 方法用于从 context 中移除键 (#38e7651)
  • **灵活的绑定:**URI 和查询绑定现已支持 encoding.UnmarshalText,为您提供更多对自定义类型反序列化的控制 (#4203)。

  • **转义路径选项:**新的引擎选项允许您选择使用转义(原始)请求路径进行路由 (#4420)。

  • 协议缓冲区内容协商:context 现已支持协议缓冲区作为可协商的内容类型,使 gRPC 风格的响应更容易集成 (#4423)。

  • **Logger 中的彩色延迟显示:**默认 logger 现以彩色呈现延迟,使您更容易一眼识别慢请求 (#4146)。

🚀 性能与增强

  • **路由树优化:**对基数树的多项改进减少了分配并加快了路径解析:
    • findCaseInsensitivePath 中的更少分配 (#4417)
    • 使用 strings.Count 进行高效的路径解析 (#4246)
    • redirectTrailingSlash 中用自定义函数替换正则表达式 (#4414)
  • **恢复优化:**堆栈跟踪读取现已更加高效 (#4466)。
  • **Logger 改进:**现可通过配置跳过查询字符串输出 (#4547)。
  • **Unix Socket 信任:**当请求通过 Unix socket 到达时,X-Forwarded-For 头现已始终受信任 (#3359)。
  • **Flush 安全性:**当底层 http.ResponseWriter 未实现 http.Flusher 时,Flush() 不再崩溃 (#4479)。
  • **代码质量重构:**使用 maps.Copymaps.Clone 的更清晰的 map 处理,用命名常量替换魔术数字,现代化的 range-over-int 循环等 (#4352, #4333, #4529, #4392)。

🐛 错误修复

  • **路由崩溃已修复:**修复了启用 RedirectFixedPathfindCaseInsensitivePathRec 中的崩溃 (#4535)。
  • Data 渲染中的 Content-Length:Data.Render 现已正确写入 Content-Length 头 (#4206)。
  • 多头部的 ClientIP:ClientIP 现已正确处理具有多个 X-Forwarded-For 头值的请求 (#4472)。
  • **绑定边界情况:**修复了绑定中的空值错误 (#2169) 并改进了表单绑定中的空切片/数组处理 (#4380)。
  • **文字冒号路由:**带有文字冒号的路由现已正确地与 engine.Handler() 配合工作 (#4415)。
  • 文件描述符泄漏:RunFd 现已正确关闭 os.File 句柄以防止资源泄漏 (#4422)。
  • **Hijack 行为:**优化了 hijack 行为以正确模型化响应生命周期 (#4373)。
  • 恢复:http.ErrAbortHandler 现已如预期那样在恢复中间件中被抑制 (#4336)。
  • **调试版本不匹配:**修复了在调试模式下报告的不正确版本字符串 (#4403)。

🔧 构建、依赖与 CI 更新

  • **Go 1.25 最低版本:**最低支持的 Go 版本现为 1.25,CI 工作流也已相应更新 (#4550)。
  • **BSON 依赖升级:**BSON 绑定依赖已升级至 mongo-driver v2 (#4549)。

Gin 1.12.0 反映了我们社区的奉献——贡献者、审阅者和用户。感谢您在每个版本中使 Gin 变得更好。

准备好试用 Gin 1.12.0 了吗?在 GitHub 上升级并告诉我们您的想法!