Что произойдёт при чтении из пустого канала, если канал инициализирован и не закрыт?

Если канал в Go инициализирован (создан) и не закрыт, но в нем нет данных, то операция чтения из него будет блокирующей.

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

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

Если канал в Go инициализирован (создан) и не закрыт, но в нем нет данных, то операция чтения из него будет блокирующей. Это значит, что горутина, которая пытается прочитать из канала, приостановится и будет ждать, пока кто-то не запишет в этот канал значение.

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

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

Условие

Что произойдёт при чтении из пустого канала, если канал инициализирован и не закрыт?

Ответ

Если канал в Go инициализирован (создан) и не закрыт, но в нем нет данных, то операция чтения из него будет блокирующей. Это значит, что горутина, которая пытается прочитать из канала, приостановится и будет ждать, пока кто-то не запишет в этот канал значение.

Пример:

ch := make(chan int) // создан пустой канал

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

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

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

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

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

Подробнее