Что выведет код Middle Каналы и select обновлено

Что выведет Go: неблокирующая отправка через select

Вопрос

Что выведет программа? Go 1.23, в go.mod указано go 1.23. Каждую строку вывода пишите с новой строки.

package main

import "fmt"

func main() {
    ch := make(chan int, 1)
    sent := 0
    for i := 0; i < 3; i++ {
        select {
        case ch <- i:
            sent++
        default:
            fmt.Println("пропуск", i)
        }
    }
    fmt.Println(sent, <-ch)
}

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

Напишите, что выведет код: каждый вывод с новой строки.

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

Коротко

Код выведет: пропуск 1, пропуск 2, 1 0. В буфер помещается один элемент: первая отправка (0) проходит.

Что выведет

пропуск 1
пропуск 2
1 0

Разбор

В буфер помещается один элемент: первая отправка (0) проходит. Дальше буфер полон, ветка отправки не готова, и выполняется default. В канале лежит 0.

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

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