Назад к вопросам
Senior
6
Что произойдёт при чтении из закрытого канала в Go?
Компании, где спрашивали
Магнит Тех
Ответ от нейросети
sobes.tech AI
При чтении из закрытого канала в Go происходит следующее:
- Если в канале есть данные, они будут прочитаны как обычно.
- Если канал закрыт и в нем нет данных, операция чтения вернёт нулевое значение типа канала и
falseво втором возвращаемом значении (если используется форма с двумя возвращаемыми значениями).
Пример:
ch := make(chan int)
close(ch)
v, ok := <-ch
fmt.Println(v, ok) // Выведет: 0 false
Это позволяет определить, что канал закрыт и больше данных не будет. При чтении из закрытого канала без данных горутина не блокируется, а сразу получает нулевое значение.
Если читать из закрытого канала без проверки второго значения, можно получить нулевые данные, что важно учитывать при логике обработки.