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

History is written by its contributors

Распределённая система - это система, в которой отказ компьютера, о существовании которого вы даже не знали, может сделать ваш собственный компьютер непригодным для использования.

Лесли Лэмпорт

Singleton Pattern в Go: реализация и случаи использования

2025-06-16 время чтения 4 мин Patterns Ilya Brin

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

Читать далее

Ад каналов в 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 🚀

Читать далее