コンテンツにスキップ

Gin 1.12.0 リリースのお知らせ: BSONサポート、Context改善、パフォーマンス向上など

Gin v1.12.0 がリリースされました

Gin v1.12.0のリリースを発表できることを大変嬉しく思います。このリリースには、新機能、意義あるパフォーマンス改善、そして堅実なバグ修正が盛り込まれています。モダンなプロトコルに対するGinのサポートを深め、開発者体験を洗練し、高速で軽量であり続けるというプロジェクトの伝統を継続するものです。

主な機能

  • BSONプロトコルサポート: レンダリング層がBSONエンコーディングをサポートするようになり、より効率的なバイナリデータ交換への道が開かれました (#4145)。

  • 新しいContextメソッド: 2つの新しいヘルパーにより、エラーハンドリングがよりクリーンでGoらしくなりました:

    • コンテキストからの型安全なエラー取得のためのGetErrorGetErrorSlice (#4502)
    • コンテキストからキーを削除するためのDeleteメソッド (#38e7651)
  • 柔軟なバインディング: URIおよびクエリバインディングがencoding.UnmarshalTextを尊重するようになり、カスタム型のデシリアライゼーションをより細かく制御できるようになりました (#4203)。

  • エスケープパスオプション: 新しいエンジンオプションにより、ルーティングにエスケープされた(生の)リクエストパスを使用することを選択できるようになりました (#4420)。

  • コンテンツネゴシエーションでのProtocol Buffers: contextがネゴシエーション可能なコンテンツタイプとしてProtocol Buffersをサポートするようになり、gRPCスタイルのレスポンスの統合がより容易になりました (#4423)。

  • ロガーでの色付きレイテンシ: デフォルトロガーがレイテンシをカラー表示するようになり、遅いリクエストを一目で見つけやすくなりました (#4146)。

パフォーマンスと機能強化

  • ルーターツリーの最適化: 基数木への複数の改善により、アロケーションが削減され、パス解析が高速化されました:
    • findCaseInsensitivePathでのアロケーション削減 (#4417)
    • 効率化のためのstrings.Countを使用したパス解析 (#4246)
    • redirectTrailingSlashでの正規表現をカスタム関数に置き換え (#4414)
  • リカバリの最適化: スタックトレースの読み取りがより効率的になりました (#4466)。
  • ロガーの改善: 設定によりクエリ文字列の出力をスキップできるようになりました (#4547)。
  • Unixソケットの信頼: リクエストがUnixソケット経由で到着した場合、X-Forwarded-Forヘッダーが常に信頼されるようになりました (#3359)。
  • Flushの安全性: 基盤となるhttp.ResponseWriterhttp.Flusherを実装していない場合でも、Flush()がpanicを起こさなくなりました (#4479)。
  • コード品質のリファクタリング: maps.Copymaps.Cloneによるよりクリーンなマップ処理、マジックナンバーを名前付き定数に置き換え、モダンなrange-over-intループなど (#4352#4333#4529#4392)。

バグ修正

  • ルーターのpanic修正: RedirectFixedPathが有効な場合のfindCaseInsensitivePathRecでのpanicを解決しました (#4535)。
  • DataレンダリングのContent-Length: Data.RenderContent-Lengthヘッダーを正しく書き込むようになりました (#4206)。
  • 複数ヘッダーでのClientIP: ClientIPが複数のX-Forwarded-Forヘッダー値を含むリクエストを正しく処理するようになりました (#4472)。
  • バインディングのエッジケース: バインディングでの空値エラーを修正し (#2169)、フォームバインディングでの空のスライス/配列の処理を改善しました (#4380)。
  • リテラルコロンルート: リテラルコロンを含むルートがengine.Handler()で正しく動作するようになりました (#4415)。
  • ファイルディスクリプタのリーク: RunFdos.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でアップグレードして、ご感想をお聞かせください!