Какие популярные сторонние библиотеки для Go вы знаете и для каких задач их применяете?

Ответ

Конечно, экосистема Go богата на качественные библиотеки. Мой выбор обычно зависит от конкретной задачи. Вот список библиотек, сгруппированных по категориям:

  • Веб-фреймворки и роутинг:

    • Gin: Высокопроизводительный фреймворк с удобным API, отлично подходит для создания REST API.
    • Echo: Еще один быстрый и расширяемый фреймворк, известен своей системой middleware.
    • Chi: Легковесный и идиоматичный роутер, который хорошо интегрируется со стандартной библиотекой.
    • gorilla/mux: Мощный и гибкий роутер, долгое время бывший стандартом де-факто.
  • Работа с базами данных (ORM / Query Builders):

    • GORM: Самая популярная full-featured ORM для Go.
    • sqlx: Легковесная надстройка над стандартным database/sql, упрощающая работу с запросами и сканирование результатов в структуры.
    • pgx: Высокопроизводительный драйвер и инструментарий для работы с PostgreSQL.
  • Конфигурация:

    • Viper: Универсальная библиотека для работы с конфигурацией из файлов (JSON, YAML, TOML), переменных окружения и удаленных источников.
  • Логирование:

    • Zap: Структурированный и очень быстрый логгер от Uber.
    • Logrus: Популярный структурированный логгер с гибкой системой хуков.
  • Тестирование:

    • testify/assert и testify/require: Предоставляют удобные функции для написания утверждений в тестах.
    • gomock: Фреймворк для создания мок-объектов.
  • Взаимодействие между сервисами:

    • grpc-go: Официальная реализация gRPC для создания высокопроизводительных RPC-сервисов.
    • go-redis: Клиент для работы с Redis.
  • Валидация:

    • go-playground/validator: Мощная библиотека для валидации структур на основе тегов.

Пример использования Gin:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default() // Создаем роутер с базовыми middleware

    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })

    r.Run() // Запуск сервера на :8080
}

Ответ 18+ 🔞

А, ну вот, опять про библиотеки Go спрашивают! Да их тут, блядь, как грязи после дождя, овердохуища просто. Но я тебе сейчас, как опытный страдалец, отфильтрую самое годное, чтобы ты не ходил, как слепой кот, по всем помойкам GitHub.

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

Веб-фреймворки и роутинг: Тут, конечно, все на Gin помешаны. Быстрый, удобный, для REST API — просто пиздец что надо. Echo тоже не лыком шит, у них там с middleware всё красиво завязано. А если ты, блядь, максималист и любишь стандартную библиотеку, но хочешь роутер поумнее — бери Chi. Он как хитрая жопа, встраивается незаметно и работает отлично. Ну а gorilla/mux — это как старый, проверенный дед, который всё ещё может дать фору молодым.

Работа с базами данных: О, тут вечный спор. Если тебе надо, чтобы всё само маппилось и жирный ORM — тебе в объятия GORM. Но будь готов, что иногда он выкинет такой финт, что ты будешь охуевать с отладкой запросов. Я лично — за sqlx. Надстройка над стандартным пакетом, мозги не выносит, но сканировать результаты в структуры — одно удовольствие, ёпта. Для PostgreSQL отдельная песня — pgx. Если работаешь с этой БД, даже не думай, бери его, он зверь.

Конфигурация: Чтобы не писать парсеры конфигов своими кривыми руками, есть Viper. Эта, сука, мартышлюшка умеет всё: файлы, переменные окружения, удалённые хранилища. Засунул туда ключ — и забыл, откуда он подтянется.

Логирование: Logrus был королём, но потом приехал Zap от Uber и всех обоссал по скорости. Если у тебя сервис, где каждый микросекунд на счету — твой выбор Zap. Если хочется попроще и с кучей плагинов — Logrus ещё поживёт.

Тестирование: Стандартный testing пакет — это, конечно, хорошо, но без testify чувствуешь себя голым в тайге. assert и require — это твои лучшие друзья, которые не дадут написать мега-условие в if. А gomock — это когда надо нагенерировать моков на какого-нибудь пидараса-интерфейс, от которого всё зависит.

Взаимодействие между сервисами: gRPC — это наш царь и бог. grpc-go — официальная реализация, быстрая, надёжная. Для очередей или кэша — go-redis. Клиент, который просто работает, без лишних плясок с бубном.

Валидация: go-playground/validator. Навесил теги на структуру — и спи спокойно. Валидирует всё, что движется, и даже то, что не движется.

Вот, например, как на Gin эту всю хуйню за пять минут слепить можно:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default() // Роутер с дефолтными middleware, которые уже за тебя всё сделали

    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": "pong",
        })
    })

    r.Run() // И поехали, сервер на :8080
}

Вот и вся магия. Главное — не пытайся взять всё и сразу, а то получится каша, блядь, в которой даже ложка не стоит. Выбирай под задачу и не изобретай велосипед, где можно взять готовый, ядрёна вошь.