
Структурированное логирование в Go: сравниваем варианты
log/slog в стандартной библиотеке, zap и zerolog — три способа писать структурированные логи в Go. Разбираем, чем они платят за скорость и когда что выбирать.

log/slog в стандартной библиотеке, zap и zerolog — три способа писать структурированные логи в Go. Разбираем, чем они платят за скорость и когда что выбирать.

Вебхук приходит один раз, а обрабатывается плохо: дубли, гонки, потерянные события при рестарте. Разбираем, как принять, проверить подпись и не потерять полезную нагрузку на Go 1.22+.

log/slog в стандартной библиотеке с Go 1.21 закрывает большинство задач логирования без сторонних пакетов. Разбираем приёмы, которые снимают боль в реальных сервисах: контекст, уровни, форматы и производительность.

В Go-экосистеме есть минимум три способа отдавать метрики Prometheus: официальный client_golang, OpenTelemetry SDK и VictoriaMetrics/metrics. Разбираем цену каждого по памяти, аллокациям и удобству, чтобы вы выбрали осознанно, а не по инерции.

Запуск ffmpeg через os/exec кажется тривиальным — до момента, когда процесс зависает на битом файле и съедает всю память. Разбираем три подхода к вызову внешних команд из Go с контролем времени, ресурсов и stderr.

Загрузка файлов — одна из тех вещей, которые работают в демо и ломаются в проде. Разбираем конкретные приёмы валидации, ограничения размера, потоковой обработки и безопасного сохранения файлов в Go-сервисе, чтобы не чинить это в три часа ночи.

Загрузка файлов в Go кажется тривиальной — пока не приходится обрабатывать гигабайтные архивы или сотни параллельных запросов. Разбираем три подхода к приёму файлов, их стоимость по памяти и latency, и даём критерии выбора.

Загрузка файлов через HTTP кажется тривиальной до первого OOM-килла в проде. Разбираем четыре подхода к приёму файлов в Go — от наивного ReadAll до потокового стриминга — с ценой каждого решения в памяти, CPU и сложности кода.

Встроенный cron-подобный планировщик в Go-сервисе — удобная штука, пока не начинаются дубли, потерянные задачи и утечки горутин. Разбираем конкретные точки, которые стоит проверить до деплоя, а не после первого инцидента.

Таймер на горутине, cron-библиотека, очередь на Redis или полноценный оркестратор — четыре способа запускать периодические задачи в Go. Разбираем, чем каждый платит за удобство и когда какой уместен.

Два основных подхода к кешированию в Go-сервисах — локальный кеш в памяти процесса и внешний Redis — решают разные задачи и ломаются по-разному. Разбираем, когда какой выбирать, чем платите за каждый вариант и как совмещать оба в одном проекте.

Стандартная библиотека Go закрывает и XML, и CSV без внешних зависимостей — но у каждого пакета свои подводные камни. Разбираем encoding/xml и encoding/csv: структурные теги, потоковый парсинг, обработку кодировок и типичные ловушки, из-за которых данные теряются молча.