Выбор ответа Junior Каналы и select спрашивают часто обновлено

Отправка в небуферизованный канал без читателя

Вопрос

Что произойдёт?

func main() {
    ch := make(chan int)
    ch <- 1
    fmt.Println(<-ch)
}

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: fatal error: all goroutines are asleep - deadlock! Отправка в небуферизованный канал ждёт получателя.

Варианты ответа

  1. Выведет 1: main сам отправит и сам прочитает
  2. Ошибка компиляции: чтение из канала в той же горутине
  3. fatal error: all goroutines are asleep - deadlock!правильный ответ
  4. Программа зависнет навсегда без сообщения

Разбор

Отправка в небуферизованный канал ждёт получателя. Других горутин нет, main спит навсегда, и рантайм, увидев, что спят все горутины, аварийно завершает программу. Компилятор такое не проверяет. «Тихое» зависание бывает, когда жива хоть одна горутина, например ждёт таймер.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.