
context в Go: рабочие приёмы отмены и таймаутов
Когда context.Context передавать явно, куда нельзя класть значения и почему context.Background() внутри библиотеки — почти всегда ошибка. Разбор с проверкой контракта отмены.

Когда context.Context передавать явно, куда нельзя класть значения и почему context.Background() внутри библиотеки — почти всегда ошибка. Разбор с проверкой контракта отмены.

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

Что проверить в собственном in-memory кеше на Go, прежде чем он утечёт по памяти, встанет под конкурентным доступом или отдаст протухшие данные. Разбор по пунктам с рабочим кодом.

Один общий rate.Limiter на всех клиентов, блокирующий Wait без контекста, лимитер под каждый запрос — четыре ошибки, из-за которых ограничение частоты в Go либо не работает, либо роняет сервис.

time.After в цикле, забытый Stop у таймера, тесты, зависящие от реального времени — четыре ситуации, где очевидный код в Go течёт или ломается, и как писать сразу правильно.

Один воркер-пул на все задачи однажды упрётся в проблему: отчёты на пять минут забивают очередь, а короткие уведомления ждут своей секунды. Разбираем, как в Go развести задачи по приоритетам и чем платит каждый способ.

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

Счёт на 200 позиций, договор с подстановкой данных, отчёт с графиками — три задачи, три разных подхода к PDF в Go. Где хватит библиотеки на чистом Go, а где придётся тащить в контейнер headless-браузер.

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

time.Now() без монотонных часов, тикеры, которые текут по памяти, и таймауты, которые никого не отменяют. Разбираем практические ошибки работы со временем в Go и цену каждой.

Что проверить в коде на aws-sdk-go-v2 перед выкатом: таймауты, ретраи, лимит соединений, multipart и особенности не-AWS провайдеров вроде MinIO и Yandex Object Storage.

Утечки time.After в бесконечном select, забытый Stop() у таймера, монотонные часы и Reset с непустым каналом. Разбираем то, на чём чаще всего спотыкаются перед выкатом.