Какой результат выведет программа №8

Будут напечатаны 0, 2, 4, 6 и 8. Для единственной горутины канал вместимости 1 попеременно пуст и заполнен.

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

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

Будут напечатаны 0, 2, 4, 6 и 8. Для единственной горутины канал вместимости 1 попеременно пуст и заполнен.

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

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

Условие

Определите, какой текст появится в консоли после выполнения следующей Go‑программы:

func main() {
    dataCh := make(chan int, 1)
    for idx := 0; idx < 10; idx++ {
        select {
        case val := <-dataCh:
            println(val)
        case dataCh <- idx:
        }
    }
}

Ответ

Будут напечатаны 0, 2, 4, 6 и 8. Для единственной горутины канал вместимости 1 попеременно пуст и заполнен.

На чётной итерации канал пуст: чтение не готово, зато можно отправить idx. На следующей итерации он полон: отправка не готова, чтение забирает предыдущее значение и печатает его.

Здесь нет случайного выбора двух готовых веток, потому что других участников и свободных мест при заполненном буфере нет. После десятой итерации последнее значение 8 прочитано, и main завершается. При другой вместимости или дополнительных горутинах рассуждение и результат изменились бы.

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

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

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

Подробнее