Sobes.tech
Назад к вопросам
Junior — Middle
86

Что происходит, если попытаться прочитать данные из канала, который в данный момент не содержит элементов?

Компании, где спрашивали
Indrive
VKVK

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

sobes.tech AI

В Go, если попытаться прочитать из канала, который в данный момент не содержит элементов, поведение зависит от типа канала:

  • Буферизированный канал: если буфер пуст, чтение блокируется, пока в канал не будет записан элемент.
  • Небуферизированный канал: чтение блокируется до тех пор, пока другой горутина не отправит значение.

Таким образом, чтение из пустого канала приводит к блокировке текущей горутины до появления данных или закрытия канала.

Пример:

ch := make(chan int)

// Чтение из пустого канала заблокирует выполнение
val := <-ch // блокируется, пока кто-то не отправит значение

// Чтобы избежать блокировки, можно использовать select с default
select {
case val := <-ch:
    fmt.Println("Получено", val)
default:
    fmt.Println("Нет данных в канале")
}