логотип PurpleSchool
логотип PurpleSchool

Веб-фреймворк Fiber в Golang

Автор

Александр Гольцман

Веб-фреймворк Fiber в Go

Fiber — это современный веб-фреймворк для языка программирования Go, основанный на FastHTTP — самом быстром HTTP-движке для Go. Fiber разрабатывался с прицелом на удобство и высокую производительность, а его API напоминает популярный фреймворк Express.js для Node.js.

Этот фреймворк отлично подходит для создания REST API, микросервисов и высоконагруженных веб-приложений. В этой статье я расскажу, как установить и использовать Fiber, разберу основные его возможности и покажу примеры кода, которые помогут вам быстро освоить работу с этим инструментом.

Установка и первый запуск

Для установки Fiber достаточно выполнить команду:

go get -u github.com/gofiber/fiber/v2

Теперь создадим минимальный веб-сервер на Fiber:

package main

import (
    "github.com/gofiber/fiber/v2"
)

func main() {
    // Создаем новый экземпляр Fiber
    app := fiber.New()

    // Определяем обработчик для корневого маршрута
    app.Get("/", func(c *fiber.Ctx) error {
        return c.SendString("Привет, Fiber!")
    })

    // Запускаем сервер на порту 3000
    app.Listen(":3000")
}

Смотрите, здесь мы создаем экземпляр fiber.App, добавляем обработчик для маршрута /, который возвращает строку, и запускаем сервер на порту 3000. Чтобы проверить работу сервера, откройте в браузере http://localhost:3000 — вы увидите "Привет, Fiber!".

Основные возможности Fiber

Fiber предоставляет удобный интерфейс для работы с HTTP-запросами и ответами. Он поддерживает:

  • Маршрутизацию (включая динамические параметры и группировку маршрутов).
  • Работу с JSON (парсинг запросов и отправка ответов).
  • Middleware (например, для логирования, кэширования и аутентификации).
  • Статические файлы (обслуживание HTML, CSS и JavaScript).
  • WebSockets (для работы в реальном времени).

Давайте разберем ключевые возможности Fiber на примерах.

Маршрутизация и обработка параметров

Динамические параметры в URL

Fiber позволяет легко извлекать параметры из URL. Например, создадим маршрут для отображения имени пользователя:

app.Get("/user/:name", func(c *fiber.Ctx) error {
    name := c.Params("name") // Получаем параметр name
    return c.SendString("Привет, " + name + "!")
})

Если открыть http://localhost:3000/user/Alex, сервер вернет "Привет, Alex!".

Query-параметры

Query-параметры передаются в URL через ?. Например, http://localhost:3000/search?query=golang:

app.Get("/search", func(c *fiber.Ctx) error {
    query := c.Query("query", "ничего не найдено") // Значение по умолчанию
    return c.SendString("Результаты поиска: " + query)
})

Смотрите, если параметр query отсутствует, сервер вернет "ничего не найдено".

Работа с JSON

В API-запросах часто передаются JSON-данные. Fiber позволяет легко их обрабатывать:

type User struct {
    Name  string `json:"name"`
    Email string `json:"email"`
}

app.Post("/user", func(c *fiber.Ctx) error {
    var user User

    // Декодируем JSON в структуру
    if err := c.BodyParser(&user); err != nil {
        return c.Status(fiber.StatusBadRequest).JSON(fiber.Map{"error": err.Error()})
    }

    // Возвращаем JSON-ответ
    return c.JSON(fiber.Map{
        "message": "Пользователь получен",
        "user":    user,
    })
})

Здесь мы используем c.BodyParser(), чтобы преобразовать JSON-запрос в структуру User. Если JSON некорректный, сервер вернет ошибку 400 Bad Request.

Middleware в Fiber

Middleware позволяет выполнять код перед основными обработчиками маршрутов. Например, логирование каждого запроса:

app.Use(func(c *fiber.Ctx) error {
    println("Новый запрос:", c.Method(), c.Path())
    return c.Next() // Передаем управление дальше
})

Группировка маршрутов

Для удобства можно группировать маршруты. Например, API для работы с пользователями:

userGroup := app.Group("/api/users")
{
    userGroup.Get("/", getUsers)
    userGroup.Post("/", createUser)
    userGroup.Get("/:id", getUserByID)
}

Такой подход делает код чище и удобнее.

Обслуживание статических файлов

Fiber может раздавать HTML, CSS и JavaScript:

app.Static("/", "./public")

Теперь файлы из ./public будут доступны по URL.

Заключение

В этой статье я расскал, как установить и использовать Fiber, разобрал основные его возможности и показал примеры кода, которые помогут вам быстро освоить работу с этим инструментом. Также еще раз кратко подчеркну главные преимущества Fiber:

  • Высокая производительность благодаря FastHTTP.
  • Простота API (похож на Express.js).
  • Гибкость и расширяемость через middleware.
  • Удобная работа с JSON и параметрами запроса.
  • Поддержка WebSockets и статических файлов.

Если вам нужен легковесный, но мощный веб-фреймворк, Fiber — отличный выбор. Он хорошо масштабируется и подходит для создания микросервисов. Попробуйте реализовать небольшое API с Fiber и убедитесь в его удобстве.

Стрелочка влевоФреймворк Fyne для создания UI в GolangВеб-фреймворк Echo в GolangСтрелочка вправо

Все гайды по Golang

Работа с YAML в GolangПреобразование типов в GolangКонвертация структур в JSON в GolangStrconv в GolangИспользование пакета SQLx для работы с базами данных в GolangРазбираемся с SQL в GolangРазделение строк с помощью функции split в GolangSort в GoПоиск и замена строк в Go - GolangИспользование пакета reflect в GolangРабота с PostgreSQL в GoPointers в GolangПарсинг в GoРабота со списками (list) в GolangПреобразование int в string в GolangРабота с числами с плавающей точкой в GolangРабота с полями в GolangИспользование enum в GolangОбработка JSON в GoЧтение и запись CSV-файлов в GolangРабота с cookie в GolangРегистры в GoКэширование данных в GolangПреобразование byte в string в GolangByte в GoИспользование bufio для работы с потоками данных в GolangДобавление данных и элементов (add) в Go
Логирование в Golang. Zap, Logrus, Loki, GrafanaРабота с Docker-контейнерами в GoИспользование pprof в GolangМеханизмы синхронизации в GolangРабота с пакетом S3 в GolangМониторинг Golang приложений с помощью PrometheusОптимизация проектов на GoПаттерны проектирования в GolangМиграции базы данных в GolangОркестрация контейнеров Go с Kubernetes + DockerGjGo Playground и компилятор GolangИспользование go mod init для создания модулей GolangРабота с переменными окружения (env) в GolangКоманда go build в GolangАвтоматизация Golang проектов — CI/CD с GitLab CI и JenkinsОтладка кода в GolangЧтение и использование конфигурации в приложениях на GolangКомпиляция в GolangКак развернуть Go-приложение на облаке AWSАутентификация в Golang
Сетевые протоколы в GoПеременные в GolangЗначения в GolangДженерик %T и его применение в GolangТипы данных в GolangИспользование tls в GolangИспользование tag в структурах GolangSwitch в GoСтроки в GolangРабота с потоками (stream) в GolangSelect в GoРуны в GoРабота с пакетом params в GolangКонвертация строк в числа в GolangNull, Nil, None, 0 в GoНаименования переменных, функций и структур в GoInt в GolangУстановка GolangЧтение и установка HTTP заголовков в GolangMethods в GolangGoLand — IDE для разработки на Golang от JetBrainsОбработка «not found» в GolangFloat в GolangФлаги командной строки в Go (Golang)Запуск внешних команд в GolangОбработка ошибок в GoИспользование defer в GolangЗначения default в GolangГенерация кода в GoФорматирование кода в GolangЧистая архитектура в GolangКаналы (channels) в GolangПолучение body из HTTP запроса в Golang
Открыть базу знаний