chi router

Тема дорожной карты · Golang

Chi — лёгкий идиоматичный HTTP-маршрутизатор для Go, полностью совместимый со стандартным пакетом net/http: любой http.Handler или http.HandlerFunc работает без адаптеров. Построенный на пакете context, Chi хранит параметры URL в контексте запроса и извлекает их с помощью chi.URLParam(r, "id"), сохраняя сигнатуры обработчиков чистыми и тестируемыми. Маршрутизатор поддерживает цепочки middleware через r.Use(), группы маршрутов с r.Route("/api", func(r chi.Router) {...}) и подмаршрутизаторы, монтируемые по любому префиксу пути, — идеальное решение для структурирования крупных REST API. Экосистема middleware Chi включает chimiddleware.Logger, chimiddleware.Recoverer, chimiddleware.RealIP, а также JWT- и OAuth-middleware, покрывая наиболее распространённые сквозные задачи Golang-сервисов. Поскольку Chi не использует рефлексию или кодогенерацию, он компилируется быстро, создаёт небольшие бинарники и чисто интегрируется в Docker-развёртывания рядом с Gin, Echo или Fiber.

Как это работает

chi router покрывает Gin (самый популярный, быстрый, много middleware), Echo, Fiber (на fasthttp, не stdlib), Chi (идиоматичный, stdlib-совместимый), и сам stdlib net/http + ServeMux (получил route patterns в 1.22). Для full-stack: Gin или Echo — для типичных API; Chi — если хотите stdlib-совместимость; сырой net/http — для минимальных HTTP-серверов. Middleware-паттерн: handlers — функции, оборачивающие другие handlers.

Когда применять

Chi — если хотите минимальный слой над stdlib с first-class роутингом + middleware. Gin — для крупнейшей экосистемы рецептов и middleware. Сырой net/http — для крошечных сервисов или sidecars. Избегайте Fiber, кроме осознанного выбора non-stdlib стэка fasthttp — Fiber не использует стандартные интерфейсы Go.

Типичные ошибки

Ловушки chi router: нет таймаутов на HTTP-сервере (ReadHeaderTimeout, ReadTimeout, WriteTimeout, IdleTimeout); handler-логика не проверяет r.Context() на cancellation (медленные клиенты блокируют goroutines); вы заперты в non-stdlib интерфейсы Fiber (каждый middleware требует Fiber-специфичного порта).

Связанные понятия

Полезные ресурсы