Перейти к содержимому

Объявляем Gin 1.12.0: поддержка BSON, улучшения Context, производительность и не только

Gin v1.12.0 Уже Здесь

Мы с гордостью объявляем о выпуске Gin v1.12.0, в который включены новые функции, значительные улучшения производительности и множество исправлений ошибок. Этот выпуск углубляет поддержку Gin для современных протоколов, совершенствует опыт разработчика и продолжает традицию проекта оставаться быстрым и лёгким.

🌟 Ключевые Особенности

  • Поддержка протокола BSON: Уровень рендеринга теперь поддерживает кодирование BSON, открывая дверь для более эффективного обмена двоичными данными (#4145).

  • Новые методы Context: Два новых вспомогательных метода делают обработку ошибок более чистой и идиоматичной:

    • GetError и GetErrorSlice для безопасного типированием получения ошибок из контекста (#4502)
    • Метод Delete для удаления ключей из контекста (#38e7651)
  • Гибкое связывание: Связывание URI и запроса теперь поддерживает encoding.UnmarshalText, давая вам больше контроля над десериализацией пользовательских типов (#4203).

  • Опция экранированного пути: Новая опция механизма позволяет вам использовать экранированный (исходный) путь запроса для маршрутизации (#4420).

  • Protocol Buffers в согласовании контента: context теперь поддерживает Protocol Buffers в качестве согласуемого типа контента, что упрощает интеграцию ответов в стиле gRPC (#4423).

  • Цветная задержка в Logger: Логгер по умолчанию теперь отображает задержку в цвете, что облегчает выявление медленных запросов с первого взгляда (#4146).

🚀 Производительность и Улучшения

  • Оптимизация дерева маршрутизации: Множество улучшений радиального дерева снижают выделения памяти и ускоряют анализ пути:
    • Меньше выделений в findCaseInsensitivePath (#4417)
    • Анализ пути с использованием strings.Count для эффективности (#4246)
    • Регулярные выражения заменены пользовательскими функциями в redirectTrailingSlash (#4414)
  • Оптимизация восстановления: Чтение трассировки стека теперь более эффективно (#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-driver v2 (#4549).

Gin 1.12.0 отражает преданность нашего сообщества — участников, рецензентов и пользователей. Спасибо за то, что делаете Gin лучше с каждым выпуском.

Готовы попробовать Gin 1.12.0? Обновитесь на GitHub и поделитесь своим мнением!