Какое поведение ожидается при попытке чтения из канала с буфером, который в данный момент пуст?

При попытке чтения из канала с буфером в Go, если буфер пуст, операция чтения блокируется до тех пор, пока в канал не будет записано новое значение.

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

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

При попытке чтения из канала с буфером в Go, если буфер пуст, операция чтения блокируется до тех пор, пока в канал не будет записано новое значение. Это поведение обеспечивает синхронизацию между горутинами: читающая горутина ждёт, пока другая горутина не отправит данные.

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

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

При попытке чтения из канала с буфером в Go, если буфер пуст, операция чтения блокируется до тех пор, пока в канал не будет записано новое значение. Это поведение обеспечивает синхронизацию между горутинами: читающая горутина ждёт, пока другая горутина не отправит данные.

Пример:

ch := make(chan int, 2) // буфер на 2 элемента

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

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

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее