Назад к вопросам
Junior
160
questionbank

Как правильно закрыть канал в Go?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Закрытие канала означает, что больше данных отправлять в него нельзя. При попытке отправить данные в закрытый канал произойдет паника.

Использовать функцию close().

ch := make(chan int)
close(ch)

Важно знать:

  • Закрывать канал следует один раз, обычно со стороны отправителя данных.
  • Получение данных из закрытого канала возможно до тех пор, пока в нем есть данные.
  • После исчерпания данных из закрытого канала последующие операции чтения будут возвращать нулевое значение типа элемента канала и false в качестве второго булевого значения, указывающего на успешность операции.
v, ok := <-ch // ok будет false после исчерпания данных из закрытого канала
  • Попытка закрыть уже закрытый канал вызовет панику.
  • Попытка получить данные из nil канала заблокирует горутину.
  • Попытка отправить данные в nil канал заблокирует горутину.