Fiber

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

Fiber — высокопроизводительный Go-фреймворк, вдохновлённый Express.js и построенный поверх fasthttp, а не стандартного пакета net/http, что обеспечивает ему одни из наименьших задержек и наибольшее число запросов в секунду среди Golang HTTP-фреймворков. Разработчики инициализируют приложение через fiber.New(), регистрируют маршруты с помощью app.Get("/path", handler) и подключают middleware через app.Use(middleware) для логирования, аутентификации, ограничения частоты запросов и CORS. Сигнатура обработчика Fiber использует *fiber.Ctx — объект контекста с c.BodyParser(&req) для привязки JSON, c.Params("id") для path-параметров, c.JSON(response) для записи JSON-ответов и c.Next() для передачи управления следующему middleware. Поскольку Fiber использует внутреннее пулирование байтовых слайсов fasthttp, его горячие пути с нулевым выделением памяти делают его популярным выбором для чувствительных к задержкам Go-микросервисов и API-шлюзов. Экосистема Fiber включает официальные пакеты middleware для JWT (github.com/gofiber/jwt), сессий, поддержки WebSocket и шаблонизатора, делая Fiber полноценной альтернативой Gin, Echo и Chi.

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

Fiber покрывает 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.

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

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

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

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