Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Golang: channel, close, panic

Что произойдёт, если закрыть канал, в который всё ещё пишут?

Проверяет понимание жизненного цикла каналов и базовых правил конкурентности в Go.

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

Если попытаться записать в уже закрытый канал, программа упадёт с panic. Закрывать канал должен только отправитель, и только тогда, когда он уверен, что больше записей не будет.

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

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

После close(ch):

  • чтение из канала возможно и безопасно;

  • запись в канал приводит к panic: send on closed channel.

Почему так сделано:

  • канал — это средство коммуникации, а не контейнер;

  • закрытие означает «поток данных завершён»;

  • запись после завершения — логическая ошибка.

Правила хорошего тона:

  1. Канал закрывает только отправитель, а не получатель.

  2. Канал закрывается один раз.

  3. Если отправителей несколько — канал не закрывают вообще, а используют отдельный сигнал остановки (context, done channel).

Вывод: закрытие канала — это ответственность стороны, которая управляет потоком данных.

  • Аватар

    Golang Guru

    Maxim Lukyanov

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

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • Golang

    Golang

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

#channel

#close

#panic

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

  • Аватар

    Golang Guru

    Maxim Lukyanov

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