Объявляем Gin 1.12.0: поддержка BSON, улучшения Context, производительность и не только
Gin v1.12.0 Уже Здесь
Мы с гордостью объявляем о выпуске Gin v1.12.0, в который включены новые функции, значительные улучшения производительности и множество исправлений ошибок. Этот выпуск углубляет поддержку Gin для современных протоколов, совершенствует опыт разработчика и продолжает традицию проекта оставаться быстрым и лёгким.
🌟 Ключевые Особенности
-
Поддержка протокола BSON: Уровень рендеринга теперь поддерживает кодирование BSON, открывая дверь для более эффективного обмена двоичными данными (#4145).
-
Новые методы Context: Два новых вспомогательных метода делают обработку ошибок более чистой и идиоматичной:
-
Гибкое связывание: Связывание URI и запроса теперь поддерживает
encoding.UnmarshalText, давая вам больше контроля над десериализацией пользовательских типов (#4203). -
Опция экранированного пути: Новая опция механизма позволяет вам использовать экранированный (исходный) путь запроса для маршрутизации (#4420).
-
Protocol Buffers в согласовании контента:
contextтеперь поддерживает Protocol Buffers в качестве согласуемого типа контента, что упрощает интеграцию ответов в стиле gRPC (#4423). -
Цветная задержка в Logger: Логгер по умолчанию теперь отображает задержку в цвете, что облегчает выявление медленных запросов с первого взгляда (#4146).
🚀 Производительность и Улучшения
- Оптимизация дерева маршрутизации: Множество улучшений радиального дерева снижают выделения памяти и ускоряют анализ пути:
- Оптимизация восстановления: Чтение трассировки стека теперь более эффективно (#4466).
- Улучшения Logger: Вывод строки запроса теперь можно пропустить через конфигурацию (#4547).
- Доверие к Unix Socket: Заголовки
X-Forwarded-Forтеперь всегда считаются надёжными при поступлении запросов через Unix сокет (#3359). - Безопасность Flush:
Flush()больше не паникует, когда базовыйhttp.ResponseWriterне реализуетhttp.Flusher(#4479). - Рефакторинг качества кода: Более чистая работа с картами с помощью
maps.Copyиmaps.Clone, именованные константы заменяют магические числа, модернизированные циклы range-over-int и многое другое (#4352, #4333, #4529, #4392).
🐛 Исправления Ошибок
- Исправлена паника маршрутизации: Разрешена паника в
findCaseInsensitivePathRecпри включенииRedirectFixedPath(#4535). - 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теперь подавляется в middleware восстановления как предполагается (#4336). - Несоответствие версии в режиме отладки: Исправлена неправильная строка версии, сообщаемая в режиме отладки (#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 и поделитесь своим мнением!