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

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

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

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

Условие

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

Ответ

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

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

Пример:

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

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

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

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

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку