Чтение из закрытого канала приводит к немедленному получению нулевого значения типа элементов канала без блокировки. Если присутствует второй булевый возвращаемый параметр, он будет false.
go
Основные последствия:
false, сигнализируя о том, что канал закрыт и полученное значение является нулевым.Сравнение чтения из открытого и закрытого канала:
| Состояние канала | Операция | Поведение | Возвращаемое значение (при наличии второго параметра) |
|---|---|---|---|
| Открыт | <-ch | Блокировка до получения значения или закрытия | Значение, true |
| Открыт | val, ok := <-ch | Блокировка до получения значения или закрытия | Значение, true |
| Закрыт | <-ch | Немедленное получение | Нулевое значение |
| Закрыт | val, ok := <-ch | Немедленное получение | Нулевое значение, false |
Использование второго булевого параметра является рекомендуемым способом определения, был ли успешно получен реальный элемент из канала или канал закрыт.
go
Такое поведение позволяет优雅地 завершать работу горутин, которые читают из канала, после его закрытия.