Выбор ответа Junior Каналы и select спрашивают часто обновлено
Отправка в небуферизованный канал без читателя
Вопрос
Что произойдёт?
func main() {
ch := make(chan int)
ch <- 1
fmt.Println(<-ch)
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: fatal error: all goroutines are asleep - deadlock! Отправка в небуферизованный канал ждёт получателя.
Варианты ответа
- Выведет 1: main сам отправит и сам прочитает
- Ошибка компиляции: чтение из канала в той же горутине
- fatal error: all goroutines are asleep - deadlock!правильный ответ
- Программа зависнет навсегда без сообщения
Разбор
Отправка в небуферизованный канал ждёт получателя. Других горутин нет, main спит навсегда, и рантайм, увидев, что спят все горутины, аварийно завершает программу. Компилятор такое не проверяет. «Тихое» зависание бывает, когда жива хоть одна горутина, например ждёт таймер.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.