Назад к вопросам
VK
Junior — Middle
85
Что происходит, если попытаться прочитать данные из канала, который в данный момент не содержит элементов?
Компании, где спрашивали
Indrive
Ответ от нейросети
sobes.tech AI
В Go, если попытаться прочитать из канала, который в данный момент не содержит элементов, поведение зависит от типа канала:
- Буферизированный канал: если буфер пуст, чтение блокируется, пока в канал не будет записан элемент.
- Небуферизированный канал: чтение блокируется до тех пор, пока другой горутина не отправит значение.
Таким образом, чтение из пустого канала приводит к блокировке текущей горутины до появления данных или закрытия канала.
Пример:
ch := make(chan int)
// Чтение из пустого канала заблокирует выполнение
val := <-ch // блокируется, пока кто-то не отправит значение
// Чтобы избежать блокировки, можно использовать select с default
select {
case val := <-ch:
fmt.Println("Получено", val)
default:
fmt.Println("Нет данных в канале")
}