Бесплатные материалы

Эта задача валит всех на собеседованиях по Go Concurrency в BigTech

Разберем одну из самых популярных и коварных задач на собеседованиях по Go Concurrency в BigTech — вызов «долгой» функции с дедлайном. Ты узнаешь, как правильно использовать каналы, контекст и селекты, чтобы не допустить утечек горутин и корректно обрабатывать ошибки.

В этом уроке:

  • Постановка задачи: как реализовать ограничение времени выполнения (Timeout/Deadline) для функции, которую нельзя отменить напрямую.
  • Работа с каналами: превращаем синхронный вызов в асинхронный с помощью паттерна Future и возвращаем канал только для чтения.
  • Оператор Select: как правильно организовать ожидание результата и сигнала об окончании времени, используя time.After.
  • Нюансы закрытия каналов: разбираем тонкий хак с получением Zero Value при чтении из закрытого канала для возврата результата или ошибки.
  • Пишем свой Context: пошаговая реализация упрощенного аналога стандартного пакета context с методами Done(), Err() и функцией отмены.
  • Generic-реализация: масштабируем решение задачи для работы с любыми типами данных с помощью дженериков.

В итоге у тебя будет четкий алгоритм решения задачи, которая проверяет сразу несколько ключевых аспектов Go: от семантики каналов и многопоточности до понимания устройства стандартных абстракций языка.

Дополнительные материалы к видео

Исходный код
https://github.com/IgorWalther/videos/tree/master/0017_slow_function_concurrency
Видео про дженерики
https://t.me/igoroutine/89?comment=321
Видео про оси (сигналы)
https://t.me/igoroutine/89?comment=360
Собеседования Concurrency