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

Что проверить в собственном 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 с непустым каналом. Разбираем то, на чём чаще всего спотыкаются перед выкатом.

Пакет html/template экранирует данные сам, но только если вы даёте ему работать. Разбираем, где контекстное экранирование ломается и как не открыть дыру через template.HTML.

Три способа собрать PDF в Go — от рисования по координатам до рендеринга HTML через headless-браузер. У каждого своя цена по скорости, точности вёрстки и зависимостям.