В Go, если попытаться считать данные из канала, который равен nil, операция чтения будет блокироваться бесконечно, то есть программа зависнет на этой операции.
Как вести себя программному обеспечению, если попробовать считать данные из канала, который был приравнен к nil?
В Go, если попытаться считать данные из канала, который равен nil, операция чтения будет блокироваться бесконечно, то есть программа зависнет на этой операции.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
В Go, если попытаться считать данные из канала, который равен nil, операция чтения будет блокироваться бесконечно, то есть программа зависнет на этой операции.
Это связано с тем, что nil-канал не инициализирован и не может ни отправлять, ни принимать данные. Поэтому чтение из nil-канала не завершится, пока не произойдёт внешнее событие (например, отмена контекста или завершение программы).
Пример:
var ch chan int // ch == nil
func main() {
fmt.Println("Попытка чтения из nil-канала")
val := <-ch // здесь программа заблокируется навсегда
fmt.Println(val) // эта строка не выполнится
}
Чтобы избежать блокировки, перед чтением нужно убедиться, что канал не равен nil.