Чему вы научитесь
- Запускать горутины и управлять их жизненным циклом: WaitGroup, безопасный сбор результатов, диагностика и предотвращение утечек
- Работать с каналами: буферизованные и небуферизованные, направления, close и range, ok-идиома, nil-канал и deadlock
- Мультиплексировать через select: неблокирующие операции с default, таймауты, done-канал, отмена
- Владеть пакетом sync: Mutex и RWMutex, atomic, Once, sync.Map, Cond — и осознанно выбирать между мьютексом и атомиком
- Управлять отменой и дедлайнами через context: пропагация по дереву горутин, first-error, корректное завершение
- Собирать боевые паттерны: pipeline, fan-in/fan-out, worker pool, semaphore, rate limiting, graceful shutdown
- Объяснять data race через модель памяти Go и happens-before — и находить гонки детектором -race
- Собрать капстоун ProcessOrders: worker pool + склад под мьютексом + отмена по context, с результатом, не зависящим от порядка горутин
О курсе
Конкурентность — то место, где Go выигрывает у других языков и где чаще всего валятся на собеседовании. Горутину запустить легко; трудно — не потерять её, не поймать гонку и получить результат, который не зависит от того, в каком порядке отработали воркеры.
Чем этот курс отличается
Здесь конкурентность разобрана целиком и отдельным курсом: в остальных курсах линейки горутины и каналы не дублируются. Главная проблема обучения теме — недетерминизм: «работает через раз» нельзя проверить обычным тестом. Мы решаем это двумя способами. На платформе результат ваших функций проверяется детерминированным агрегатом (сумма, множество, состояние склада) и стресс-повтором: решение прогоняется многократно, и плавающая логика падает. А чтобы вы увидели гонку по-настоящему, в курсе 21 парное локальное задание: тот же код запускается у вас с флагом -race, и детектор показывает конфликт своими словами.
Ваш путь по курсу
Сначала — горутины: запуск, жизненный цикл, захват переменных, WaitGroup, утечки. Затем каналы: буферизация, направления, close и range, ok-идиома, nil-канал и классические дедлоки. Дальше select: default, таймауты, done-канал. Потом sync: Mutex и RWMutex, Once, atomic, sync.Map, Cond и выбор инструмента под задачу. Следом context: отмена, дедлайны, пропагация, значения в конвейере. Затем модуль боевых паттернов: pipeline, fan-in/fan-out, worker pool, semaphore, rate limiting, graceful shutdown. В финале — data race и модель памяти, починка гонок в чужом коде и капстоун ProcessOrders: worker pool обрабатывает заказы shopdb, резервирует товар на потокобезопасном складе, корректно завершается по отмене и возвращает детерминированный результат.
Сколько здесь практики
680 шагов, из них 72 % — активные: 340 задач на Go с автопроверкой, 147 интерактивных тестов и 21 локальное задание с -race. У каждой задачи — лестница подсказок из 1–3 ступеней и неограниченное число попыток, эталон открывается после сдачи. Каждый модуль заканчивается практикумом, часть модулей — двумя.
С чего начать
Первый практический урок про горутины открыт бесплатно — запустите первую горутину и получите зелёную галочку до покупки.
Для кого этот курс
Курс — для тех, кто пишет на Go и подходит к конкурентности всерьёз.
- Джунам и мидлам на Go, у которых в проде «иногда падает» и «иногда виснет», а причину найти не получается.
- Готовящимся к собеседованию: конкурентность — обязательная секция интервью на Go, от «чем буферизованный канал отличается от небуферизованного» до «покажи worker pool».
- Разработчикам с других языков, привыкшим к потокам и локам, которым нужно перестроиться на каналы, select и context.
- Выпускникам курса «Go: идиоматичный код», которые пишут идиоматичный последовательный код и хотят перейти к конкурентному.
Начальные требования
Что нужно:
- Уверенный базовый Go: функции, структуры, слайсы и мапы, указатели, интерфейсы и ошибки. Это курсы «Go с нуля» и «Go: идиоматичный код».
- Компьютер с браузером. Для 21 локального задания с детектором гонок — установленный Go (в курсе показано, как поставить).
Что НЕ нужно:
- Не нужен опыт многопоточного программирования на других языках: модель памяти и happens-before объясняются с нуля.
- Не нужно ставить Go, чтобы пройти курс и получить сертификат: все 340 задач решаются в браузере, локальные задания — дополнительные.
- Не нужна теория операционных систем: планировщик подаётся ровно в объёме, нужном для практики.
Как проходит обучение
- Формат: 8 модулей, 48 уроков, 680 коротких шагов. Текстовые лекции с примерами на сквозном домене shopdb (конкурентная обработка заказов), без видео.
- Практика: 72 % шагов — активные. 340 задач с автопроверкой, 147 интерактивных тестов и 21 локальное задание с настоящим детектором гонок -race.
- Проверка: скрытые тесты на движке Go 1.26.1. Конкурентный результат проверяется детерминированным агрегатом и стресс-повтором — «работает через раз» не проходит. Отмена моделируется явным cancel(), а не таймером: тест не зависит от скорости машины.
- Темп: свой, без дедлайнов. Доступ бессрочный, попыток неограниченно.
- Поддержка: комментарии под каждым шагом.
Ориентир нагрузки: при 7–9 часах в неделю курс проходится примерно за 7–8 недель; общий объём — около 58 часов.
Программа курса
В курс входят
- 48 уроков
- 147 тестов
- 340 интерактивных задач
Наши преподаватели
Сертификат
Что вы получаете
- Навык писать конкурентный код, который не течёт и не зависает: осознанный выбор между каналом, мьютексом и атомиком, корректная отмена через context.
- Умение читать отчёт детектора -race и чинить гонку, а не прятать её под sleep.
- 340 решённых задач, 147 тестов и 21 локальный прогон с -race.
- Капстоун ProcessOrders — конкурентная обработка заказов shopdb (worker pool, потокобезопасный склад, graceful shutdown) — артефакт в портфолио и готовый ответ на вопрос собеседования.
- Бессрочный доступ к материалам и обновлениям, сертификат Stepik.
- Мост дальше: «Go: тестирование и стандартная библиотека» — https://stepik.org/course/297081.