Анонс Gin 1.12.0: поддержка BSON, улучшения контекста, производительность и многое другое
Gin v1.12.0 уже здесь
Мы рады объявить о выпуске Gin v1.12.0, наполненном новыми возможностями, значительными улучшениями производительности и основательным набором исправлений ошибок. Этот релиз углубляет поддержку Gin для современных протоколов, совершенствует опыт разработки и продолжает традицию проекта оставаться быстрым и лёгким.
Ключевые возможности
-
Поддержка протокола BSON: Слой рендеринга теперь поддерживает кодирование BSON, открывая путь к более эффективному обмену бинарными данными (#4145).
-
Новые методы контекста: Два новых хелпера делают обработку ошибок чище и идиоматичнее:
-
Гибкая привязка: Привязка URI и строки запроса теперь учитывает
encoding.UnmarshalText, давая вам больше контроля над десериализацией пользовательских типов (#4203). -
Опция экранированного пути: Новая опция движка позволяет использовать экранированный (исходный) путь запроса для маршрутизации (#4420).
-
Protocol Buffers в согласовании контента:
contextтеперь поддерживает Protocol Buffers как согласуемый тип контента, упрощая интеграцию ответов в стиле gRPC (#4423). -
Цветная задержка в логере: Логер по умолчанию теперь отображает задержку с цветом, упрощая обнаружение медленных запросов с первого взгляда (#4146).
Производительность и улучшения
- Оптимизации дерева маршрутизатора: Множественные улучшения radix-дерева уменьшают аллокации и ускоряют парсинг путей:
- Оптимизация Recovery: Чтение стек-трейсов теперь более эффективно (#4466).
- Улучшения логера: Вывод строки запроса теперь можно пропустить через конфигурацию (#4547).
- Доверие Unix-сокетам: Заголовки
X-Forwarded-Forтеперь всегда доверенны, когда запросы приходят через Unix-сокет (#3359). - Безопасность Flush:
Flush()больше не паникует, когда базовыйhttp.ResponseWriterне реализуетhttp.Flusher(#4479). - Рефакторинг качества кода: Более чистая работа с map через
maps.Copyиmaps.Clone, именованные константы вместо магических чисел, модернизированные циклы range-over-int и многое другое (#4352, #4333, #4529, #4392).
Исправления ошибок
- Исправлена паника маршрутизатора: Устранена паника в
findCaseInsensitivePathRecпри включённомRedirectFixedPath(#4535). - Content-Length в Data Render:
Data.Renderтеперь корректно записывает заголовокContent-Length(#4206). - ClientIP с множественными заголовками:
ClientIPтеперь корректно обрабатывает запросы с несколькими значениями заголовкаX-Forwarded-For(#4472). - Граничные случаи привязки: Исправлены ошибки пустых значений в привязке (#2169) и улучшена обработка пустых слайсов/массивов в привязке форм (#4380).
- Маршруты с литеральными двоеточиями: Маршруты с литеральными двоеточиями теперь корректно работают с
engine.Handler()(#4415). - Утечка файловых дескрипторов:
RunFdтеперь корректно закрывает обработчикos.Fileдля предотвращения утечки ресурсов (#4422). - Поведение Hijack: Уточнено поведение hijack для корректного моделирования жизненного цикла ответа (#4373).
- Recovery:
http.ErrAbortHandlerтеперь подавляется в middleware recovery, как и задумано (#4336). - Несоответствие версии в debug: Исправлена некорректная строка версии, выводимая в режиме debug (#4403).
Сборка, зависимости и CI
- Минимум Go 1.25: Минимальная поддерживаемая версия Go теперь 1.25, CI-пайплайны обновлены соответственно (#4550).
- Обновление зависимости BSON: Зависимость привязки BSON обновлена до
mongo-driverv2 (#4549).
Gin 1.12.0 отражает преданность нашего сообщества — контрибьюторов, ревьюеров и пользователей. Спасибо за то, что делаете Gin лучше с каждым релизом.
Готовы попробовать Gin 1.12.0? Обновитесь на GitHub и сообщите нам, что вы думаете!