⚡️ Concurrency Patterns. Fan In В предыдущем посте мы немного напутали с определением такого многопоточного паттерна как Fan Out На деле мы показывали Tee, который распространяет одно и то же значение V из канала-источника на N каналов-потребителей Отличие Fan Out от Tee в том, что на N каналов распространяются разные значения из одного канала-источника. Тобишь, воркеры тянут значения из одного канала, борясь за них насмерть Лирическое отступление закончено, наша совесть чиста, а сегодняшняя тем...
go-with-me
go-with-me — уютный канал, где Golang становится дружелюбным Мы — Go-инженеры в BigTech, обожаем делиться своей экспертизой, пишем статьи о скрытых ловушках, объясняя все на пальцах — Проводим Go-моки questions @lovelygopher
Графики
📊 Средний охват постов
📉 ERR % по дням
📋 Публикации по дням
📎 Типы контента
Лучшие публикации
19 из 19🥚 True Tech Go: митап для Go-разработчиков от МТС 🗓 Когда? — 11 сентября 2025 | 19:00 по Москве 🌐 Формат — офлайн и онлайн Список докладов: — Дмитрий Мамыкин (T-Bank) - WaitGroup Pitfalls — разберём, как привычный sync.WaitGroup может приводить к паникам, заглянем под капот, посмотрим на устройство и работу Add, обсудим альтернативы (conc.WaitGroup, sync.errgroup) и поделимся практиками для безопасного использования — Виталий Левченко (Wildberries) - Рассмотрим примеры использования LLM для а...
👻 Concurrency Patterns. Bridge Следующая ступень после Or Done Channel паттерна — Bridge. Сначала разберемся с какой ситуацией помогает бороться эта модель Представим, что у нас время от времени динамически появляются каналы с данными, и их число заранее неизвестно. Все эти стримы мы хотим слить в единый канал, откуда и планируем получать данные. Наш потребитель как раз и будет высасывать все-все из этого стрима Кратенько: — Источники (каналы) создаются динамически (по событиям / шардам / тайм-...
💥sync package. Cond's hidden trap В этот раз поговорим про sync.Cond и убедимся, что этот примитив небезопасно использовать без оглядки на важную штуку... Одна забытая проверка — и ваши горутины повиснут навечно, инициируя OOM Killed 1. Preface Cond — примитив синхронизации для ожидания услови(я|ий) без busy-waiting с возможностью единичного и множественного пробуждений На поверхности мы имеем 3 метода: — Wait — отпустить мьютекс, запарковаться, получить уведомление, распарковаться, взять мьюте...
☀ Concurrency Patterns. Fan Out Для начала разберемся в термине Fan Out. Частенько возникают такие ситуации, когда нам необходимо распространить одно и то же значение на несколько потоков, используя каналы. С этой задачей отлично справляется паттерн Fan Out Вы наверняка миллион раз использовали его, но вопрос только в том, насколько осознанно вы это делали. Поэтому на сегодняшней повестке дня вариативность реализаций данного паттерна В базовом случае мы имеем чот такое: package main import ( "fm...
🤪 Surprising WaitGroup Panic Часто ли вы ловили паники, используя WaitGroup? - не думаем. Сегодняшняя история об одной из таких, зарытой где-то в недрах, вас очень удивит Не будем томить, приступаем! Для начала рассмотрим избитую структуру: type WaitGroup struct { noCopy noCopy state atomic.Uint64 // high 32 bits are counter, low 32 bits are waiter count. sema uint32 } — noCopy - специфическая структура, используемая утилитой govet для маркировки откопированных значений — sema - используется вн...
😠 Concurrency Patterns. Or Done Channel Отгремев на MTC True Tech Go и собравшись с силами, мы решили порадовать вас новым постом! Сегодня вещаем о таком механизме как Or Done Channel Or Done Channel применим, когда мы выполняем какую-то операцию и зависимы от пачки ивентов завершения. Под пачкой ивентов подразумевается множество каналов, которые в неопределенный момент присылают токен завершения (к примеру пустую структуру) Пу-пу-пу, погнали! Обсудим использование этого паттерна на примере обы...
😁 Напоминание: Мы проводим Go мок-собеседования Для чего это вам? Мок позволяет предметно оценить свои знания, снять лишний стресс перед реальным собесом и понять, где именно зарыты пробелы Что будет на моке? — Разберём теорию от основ до глубоких нюансов — Погоняем лайвкодинг с задачами уровня реального собеса — Разберём concurrency-паттерны и оптимизации ⚙️Ведём вдвоём — будет чуть сложнее, но интереснее! Дадим честный и подробный фидбэк с материалами для прокачки Записаться: @lovelygopher От...
🎨 Interface Comparisons В этот раз поговорим про сравнения интерфейсов и развеем все мифы, которые вы могли встретить на своем пути Нюансы в этой теме важны для понимания ввиду возможности паник при использовании некорректных нижележащих сущностей Для начала взглянем на структуру не пустого интерфейса: type iface struct { tab *itab data unsafe.Pointer } — С полем data все прозрачно - это непосредственно те данные, которые мы закладываем при присваивании интерфейсу какого-то значения — itab соде...
🤪 WaitGroup Pitfalls Сегодня речь пойдет про крайние случаи при работе с WaitGroup, о которой мы уже говорили в предыдущем посте. Советую обратиться к нему с целью изучения внутренней структуры этой сущности и понимания того, что такое counter Предлагаю незамедлительно приступить к делу! 1. Паника при негативном счетчике Запомните ключевое - Done под капотом является вызовом Add со значением -1 (тык). Основываясь на внутрянке метода Done и внутренней имплементации метода Add, в котором заложена...