Выбор ответа Junior Каналы и select спрашивают часто обновлено
Чтение из закрытого канала
Вопрос
Что выведет код?
ch := make(chan int, 1)
ch <- 1
close(ch)
v, ok := <-ch
fmt.Println(v, ok)
v, ok = <-ch
fmt.Println(v, ok)
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: 1 true и 0 false. Закрытый канал сначала отдаёт оставшиеся в буфере значения с ok == true.
Варианты ответа
1 true, затем panic на втором чтении1 trueи1 false- deadlock на первом же чтении
1 trueи0 falseправильный ответ
Разбор
Закрытый канал сначала отдаёт оставшиеся в буфере значения с ok == true. Когда буфер пуст, чтение сразу возвращает нулевое значение и ok == false, без блокировки и без паники. Паникует только отправка в закрытый канал.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.