
Сборщик мусора Go: как работает и как его настраивать
Сервис на Go начал держать 4 ГБ RSS вместо ожидаемого гигабайта, а latency подскочила из-за пауз GC. Разбираем, как работает сборщик, за что отвечают GOGC и GOMEMLIMIT и когда их трогать.

Сервис на Go начал держать 4 ГБ RSS вместо ожидаемого гигабайта, а latency подскочила из-за пауз GC. Разбираем, как работает сборщик, за что отвечают GOGC и GOMEMLIMIT и когда их трогать.

Почему миллион горутин помещается в память, где случается блокировка на syscall и что означает GOMAXPROCS. Разбор модели G-M-P на уровне механизма планировщика Go 1.22+.

Дефолтный http.Client без таймаутов рано или поздно подвесит сервис на зависшем соединении. Разбираем, что настроить в клиенте к чужому API, чтобы он не убивал вас в проде.

Запустить горутину в цикле с time.Sleep кажется простым, но задачи наслаиваются, паникуют и не гасятся при остановке сервиса. Разбираем рабочие подходы к периодическим задачам в Go 1.22+.

Утечка горутин, потеря задач при завершении, паника воркера, которая роняет весь пул. Разбираем ошибки в самодельных очередях задач на Go и показываем, как их закрыть.

Как группировать элементы в батчи по размеру и по таймеру, ограничивать параллельность и не потерять последний неполный пакет. Разбор четырёх подходов с ценой каждого.

Сервис читал конфиг из os.Getenv напрямую, и на проде выяснилось, что при пустой переменной он молча стартовал с нулевым таймаутом. Разбираем, как устроена загрузка конфигурации в Go и где она ломается первой.

После стандартного роутера в net/http из Go 1.22 выбор библиотеки перестал быть очевидным. Разбираем, когда хватает stdlib, а когда нужен chi или gin, и чем платишь за каждый вариант.

Что проверять во входящих HTTP-запросах на Go, где validator.v10 помогает, а где вредит, и почему одной структуры с тегами обычно мало.

Разбираем, как корректно инструментировать Go-сервис через OpenTelemetry: где заканчивается span, почему context теряет трассу и чем платишь за сэмплирование.

Метрика с UUID в лейбле раздувает память exporter'а до гигабайтов, а забытый reset ломает подсчёт запросов. Разбираем ошибки, из-за которых мониторинг на Go врёт или падает.

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