Проверяет опыт работы с контекстом.
context.Done() — канал, который закрывается при отмене/таймауте контекста. Закрытие канала в Go наблюдают все получатели, поэтому все горутины мгновенно видят отмену без отправки отдельных сигналов.
Определение: Done() — канал «только для чтения», закрываемый рантаймом контекста.
Почему «широковещание»:
в Go закрытый канал немедленно отдаёт нулевое значение всем читателям;
чтение из закрытого канала завершается мгновенно, что детектируется в select.
Типичный паттерн:
select {
case <-ctx.Done():
return ctx.Err()
case x := <-work:
// обработка x
}Плюсы:
O(1) синхронизация множества потребителей;
без гонок и без ручной рассылки сообщений.
Вывод: используйте Done() как единый триггер отмены для всех участников операции.