---
title: "Знакомство с Fiber: зачем и когда"
description: "Что такое Fiber: Express-подобный веб-фреймворк для Go на движке Fasthttp. Разберём, чем он отличается от Gin, когда его стоит выбирать и с чего начать."
course: "Fiber: экспресс-подобный веб-фреймворк на Fasthttp"
url: "https://golangmaster.ru/courses/fiber/lessons/01-znakomstvo/"
published: "2026-09-19"
updated: "2026-09-21"
minutes: 15
---

# Знакомство с Fiber: зачем и когда

*Курс «Fiber: экспресс-подобный веб-фреймворк на Fasthttp», урок 1 из 25. ~15 минут. Обновлено 21.09.2026. Источник: https://golangmaster.ru/courses/fiber/lessons/01-znakomstvo/*

Fiber — это веб-фреймворк для Go, который выглядит как Express из Node.js, а работает поверх движка Fasthttp. Разберём, что такое Fiber, чем он отличается от Gin и стандартного net/http, в каких проектах он уместен, а в каких его брать не стоит — с примерами кода и без маркетингового тумана.

Представьте типичный переезд: команду переводят с Node.js на Go, бэкенд — десяток REST-эндпоинтов, JSON туда-сюда, пара middleware. На чистом net/http это пишется, но быстро всплывает рутина: вытащи тело запроса, проверь ошибку, собери ответ, проставь код, запиши лог. Каждое действие — руками.

Второй сценарий зеркальный: вы уже пишете на Go, сервис растёт, и хочется готовых решений — логирование, recovery после паник, лимитеры, — а не собирать их из стандартной библиотеки по кусочкам. Оба сценария — нормальные причины взять фреймворк. Вопрос в том, какой именно. Разберём, что такое Fiber, как он устроен и в каких проектах ему место.

### Что такое Fiber и на чём он работает

Fiber — сторонний веб-фреймворк с открытым кодом, вдохновлённый Express.js из Node.js. Проект появился в начале 2020 года и быстро выбился в лидеры: по числу звёзд на GitHub Fiber — второй фреймворк Go после Gin (точные цифры на странице репозитория устаревают быстрее, чем любой учебник, поэтому их лучше смотреть вживую).

Ключевое отличие спрятано в фундаменте. Gin и Echo работают поверх стандартного пакета net/http, а Fiber — поверх Fasthttp, отдельного HTTP-движка от автора fastjson. Fasthttp переписывает обработку соединений с прицелом на переиспользование памяти: запросы и ответы живут в пуле объектов, и на горячем пути почти ничего не аллоцируется. Отсюда слоган Fiber — «zero memory allocation». За эту скорость придётся платить совместимостью, но о цене поговорим чуть ниже.

### Первый взгляд: сервер в полтора десятка строк

```go
package main

import (
        "log"

        "github.com/gofiber/fiber/v3"
)

func main() {
        app := fiber.New()

        app.Get("/", func(c fiber.Ctx) error {
                return c.SendString("Hello, World!")
        })

        log.Fatal(app.Listen(":3000"))
}
```

Разбор по строкам. fiber.New() создаёт приложение с настройками по умолчанию и возвращает *fiber.App. app.Get("/", ...) регистрирует маршрут «GET /»: первым аргументом идёт путь, вторым — хендлер, обычная функция, которая принимает контекст и возвращает error. Внутри хендлера c.SendString("Hello, World!") пишет строку в тело ответа; Fiber сам проставит статус 200 и Content-Type: text/plain. app.Listen(":3000") поднимает сервер на порту 3000 и блокирует выполнение до остановки процесса. Ошибку запуска — скажем, занятый порт — отправляем в log.Fatal: она напечатается, а программа завершится с кодом 1.

### Fiber vs Gin: разница не в скорости, а в фундаменте

Запрос «fiber vs gin» — самый частый при выборе фреймворка, поэтому зафиксируем главное. Gin построен на net/http, а значит совместим со всей стандартной экосистемой: middleware в стиле http.Handler, httptest, прокси, инструменты мониторинга — всё подключается без плясок. Fiber построен на Fasthttp, и его типы с net/http несовместимы: готовые middleware из старой экосистемы напрямую не работают.

Взамен Fiber даёт более компактный API и скорость на синтетике. Есть и мост между мирами: middleware/adaptor оборачивает net/http-хендлеры для Fiber и наоборот — если тащить legacy частями, это спасает.

Моё правило простое: проект уже завязан на net/http-экосистему или вы в сомнениях — берите Gin, он предсказуемее. Новый API-сервис с нуля и тяга к Express-стилю — Fiber честный кандидат. Сравнение Gin с другими фреймворками разобрано в отдельном [курсе по Gin](/courses/gin/).

### Четыре фреймворка в одной таблице

| Фреймворк | Основа | Совместимость с net/http | Стиль API | Типичная ниша |
| --- | --- | --- | --- | --- |
| Fiber | Fasthttp | нет, есть middleware/adaptor | Express-подобный | API-сервисы, миграция с Node.js |
| Gin | net/http | полная | лаконичный, свой контекст | самый распространённый выбор |
| Echo | net/http | полная | минималистичный | REST API |
| chi | net/http | полная | чистые http.Handler | кто хочет остаться в stdlib |

### Проверьте себя

**Вопрос:** На каком HTTP-движке построен Fiber?

- net/http
- ✅ Fasthttp
- httprouter
- gorilla/mux

Fiber построен на Fasthttp — движке с пулом переиспользуемых объектов. Gin и Echo работают поверх net/http, а httprouter и gorilla/mux — это только роутеры, а не движки.

### Бенчмарки: читайте условия, а не заголовки

Скорость — главный рекламный аргумент Fiber, и с ним стоит обращаться аккуратно. В синтетических тестах Fasthttp действительно уходит вперёд: маленькие ответы, keep-alive-соединения, plaintext-бенчмарки вроде TechEmpower — там отрыв от net/http измеряется разами. Но условия узкие: в теле ответа несколько байт, базы данных нет, бизнес-логики нет.

В настоящем сервисе узкое место почти всегда другое: запрос к БД, вызов внешнего API, сериализация сложных структур. Смена движка может не сдвинуть время ответа ни на миллисекунду. Практический вывод: если ваш сервис живёт в пределах пары тысяч запросов в секунду, выбирайте фреймворк по удобству API и экосистеме. Скорость Fasthttp раскрывается на отдельных горячих эндпоинтах с крошечными ответами — и это скорее исключение, чем правило.

> **Цена за Fasthttp — несовместимость.** Типы Fasthttp несовместимы с net/http: http.ResponseWriter и http.Handler в хендлерах Fiber не работают, а стандартные middleware придётся переписывать или оборачивать через middleware/adaptor. Это главный подводный камень фреймворка — взвешивайте его до старта проекта, а не после.

### Когда Fiber — правильный выбор, а когда нет

Fiber раскрывается в трёх ситуациях. Первая — новый REST API или микросервис с нуля: маршруты, валидация, JSON и middleware собраны в одном стиле. Вторая — бэкенд для SPA или мобильного приложения, где эндпоинтов много, а ответы лёгкие. Третья — миграция с Node.js и Express: роуты читаются почти один в один, и команде проще переступить порог.

Когда не стоит. Если сервис глубоко завязан на net/http — стандартные middleware, кастомные http.Handler, интеграции с инфраструктурой — переезд обернётся переделкой всех мостиков. Если проект уже работает на Gin и всё устраивает, переписывать ради «скорости» я бы не стал: трудозатраты не окупятся, о чём уже говорили в разделе про бенчмарки. И если вы только осваиваете язык, начните с [базового курса по Go](/courses/go-basics/) — фреймворк без синтаксиса превращается в магию.

### Что есть в коробке

- Маршрутизация: методы Get/Post/Put/Delete, параметры пути, wildcard-пути
- Middleware: logger, cors, recover, limiter, cache, helmet, requestid и другие
- JSON: c.JSON для ответов, BodyParser для разбора тела запроса
- Статические файлы и отдача SPA одной строкой
- HTML-шаблоны через подключаемые движки (интерфейс Views)
- WebSocket и Server-Sent Events
- Сессии, cookie, подпись и шифрование cookie
- Тестовый режим app.Test — HTTP-запрос к приложению без сети

### Что ответит сервер из этого кода на запрос GET /, если при старте ничего не упало?

```go
app := fiber.New()

app.Get("/", func(c fiber.Ctx) error {
        return c.SendString("Привет, Fiber!")
})
```

**Что выведет программа?**

- ✅ Тело «Привет, Fiber!» и статус 200
- Тело «Hello, World!» и статус 200
- Статус 404 и пустое тело
- Статус 500 и тело «Error»

SendString пишет переданную строку в тело ответа, статус по умолчанию — 200. «Hello, World!» появился бы, только если передать в SendString именно такую строку.

### Соберите hello world

Вставьте пропущенные вызовы Fiber, чтобы сервер собрался и ответил на корневой маршрут.

```go
package main

import (
        "log"

        "github.com/gofiber/fiber/v3"
)

func main() {
        app := ___()

        app.___("/", func(c fiber.Ctx) error {
                return c.___("Привет, Fiber!")
        })

        log.Fatal(app.___(":3000"))
}
```

Подсказка: Четыре вызова: создать приложение, зарегистрировать маршрут, записать тело ответа, запустить сервер.

Правильные ответы в пропусках: `fiber.New`, `Get`, `SendString`, `Listen`

### Порядок внутри main()

Соберите тело main() первого сервера: от создания приложения до запуска. Лишних строк нет.

Правильный порядок строк:

1. `app := fiber.New()`
2. `app.Get("/", func(c fiber.Ctx) error {`
3. `	return c.SendString("Готово")`
4. `})`
5. `log.Fatal(app.Listen(":3000"))`

### Словарь урока

- **Fiber** — Express-подобный веб-фреймворк для Go, работающий поверх движка Fasthttp.
- **Fasthttp** — HTTP-движок с пулом переиспользуемых объектов и минимумом аллокаций — фундамент Fiber.
- **fiber.Ctx** — Контекст запроса: параметры, заголовки, тело, методы ответа. Переиспользуется между запросами.
- **middleware/adaptor** — Мост между Fiber и хендлерами net/http: конвертирует http.Handler в Fiber-хендлер и обратно.
- **c.SendString** — Записывает строку в тело ответа; Fiber проставляет Content-Type: text/plain и статус 200.
- **app.Listen(":3000")** — Запускает сервер на порту 3000, блокирует выполнение и возвращает error — обычно уходит в log.Fatal.

### Честно про запуск и что дальше

Один момент стоит проговорить сразу: код Fiber в браузерной песочнице этого сайта не запускается — сетевые приложения она не умеет. Все примеры курса — рабочие образцы с построчным разбором; чтобы выполнить их руками, нужен локально установленный Go, покажем дальше.

В следующем уроке поставим Fiber, соберём первый сервер и проверим его ответ через curl: [Урок 2: установка и первый сервер](/courses/fiber/lessons/02-pervyj-server/).

## Коротко: что запомнить

- Fiber — Express-подобный фреймворк Go поверх движка Fasthttp, второй по популярности после Gin.
- Главное отличие от Gin — фундамент: Fasthttp вместо net/http, отсюда скорость и несовместимость с http.Handler.
- middleware/adaptor — мост между Fiber и экосистемой net/http, если без legacy не обойтись.
- Бенчмарки показывают отрыв на маленьких ответах; в реальных сервисах узкое место обычно в БД и внешних вызовах.
- Fiber уместен для новых API-сервисов и миграции с Express; для проектов на net/http честнее Gin.
- Хендлер Fiber — функция func(c fiber.Ctx) error; ответ пишется методами контекста вроде c.SendString.

## Домашнее задание

Выпишите пять эндпоинтов вашего текущего проекта (или придумайте сервис заметок) и для каждого пометьте: какой HTTP-метод нужен, есть ли параметры пути, какой middleware пригодится. Затем воспроизведите hello world из урока по памяти, не подглядывая, — это лучший тест на то, что структура Fiber-сервера отложилась.

## Вопросы и ответы по уроку

### Fiber быстрее Gin?

На синтетических бенчмарках с маленькими ответами — заметно. В реальных сервисах узкое место обычно в БД и внешних вызовах, поэтому разница часто остаётся невидимой для пользователя.

### Можно ли использовать стандартные net/http middleware с Fiber?

Напрямую нет — типы несовместимы. Мостом служит middleware/adaptor, который оборачивает http.Handler для Fiber и Fiber-хендлеры для net/http.

### Какая версия Fiber актуальна?

Актуальная ветка — v3, пакет github.com/gofiber/fiber/v3. В старых туториалах встречается v2: там другой путь импорта и указатель *fiber.Ctx в хендлерах.
