Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: context, done, broadcast

Что такое context.Done() и почему одно закрытие видят все горутины?

Проверяет опыт работы с контекстом.

Короткий ответ

context.Done() — канал, который закрывается при отмене/таймауте контекста. Закрытие канала в Go наблюдают все получатели, поэтому все горутины мгновенно видят отмену без отправки отдельных сигналов.

Длинный ответ

Определение: Done() — канал «только для чтения», закрываемый рантаймом контекста.

  • Почему «широковещание»:

  • в Go закрытый канал немедленно отдаёт нулевое значение всем читателям;

  • чтение из закрытого канала завершается мгновенно, что детектируется в select.

  • Типичный паттерн:

select {
case <-ctx.Done():
    return ctx.Err()
case x := <-work:
    // обработка x
}
  • Плюсы:

  • O(1) синхронизация множества потребителей;

  • без гонок и без ручной рассылки сообщений.

  • Вывод: используйте Done() как единый триггер отмены для всех участников операции.

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Golang

    Golang

Ключевые слова

#context

#done

#broadcast

Подпишись на Golang Developer в телеграм

  • Аватар

    Golang Guru

    Maxim Lukyanov

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.