Sobes.tech
Назад к вопросам
Senior
6

Что произойдёт при чтении из закрытого канала в Go?

Компании, где спрашивали
Магнит Тех

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

sobes.tech AI

При чтении из закрытого канала в Go происходит следующее:

  • Если в канале есть данные, они будут прочитаны как обычно.
  • Если канал закрыт и в нем нет данных, операция чтения вернёт нулевое значение типа канала и false во втором возвращаемом значении (если используется форма с двумя возвращаемыми значениями).

Пример:

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

v, ok := <-ch
fmt.Println(v, ok) // Выведет: 0 false

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

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