Блог инженера

History is written by its contributors

Ад каналов в Go: как мы победили chan map[string]*map[int]chan struct{}

2025-05-14 время чтения 8 мин Golang Concurrency Refactoring Ilya Brin

Привет, гошник! 👋

Видел ли ты когда-нибудь код вроде chan map[string]*map[int]chan struct{}? Если да, то ты знаешь, что такое ад каналов.

Это история о том, как мы начали с простого, дошли до кошмара и нашли элегантное решение. Real-time система уведомлений, которая выросла от 100 пользователей до 100,000, и как мы рефакторили архитектуру каналов.

Спойлер: в итоге мы заменили весь этот ужас на 3 простых интерфейса и типизированные каналы 🚀

Читать далее

Go Race Detector: находим и исправляем data races

2025-01-15 время чтения 8 мин Golang Concurrency Debugging Ilya Brin

Привет, охотник за багами! 👋

Data races - это самые коварные баги в concurrent программах. Они прячутся в продакшне, не воспроизводятся локально и портят данные самым непредсказуемым образом.

К счастью, в Go есть встроенный детектор гонок данных, который находит эти баги автоматически. Это как рентген для вашего concurrent кода!

Разбираем, что такое data races, как их находить и как исправлять с помощью Go Race Detector 🚀

Читать далее