Что происходит при переполнении канала

«Что происходит при переполнении канала» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Пример с буферизованным каналом:

ch := make(chan int, 2)
ch <- 1
ch <- 2
ch <- 3 // Блокируется, пока значение не будет прочитано

Можно использовать select с default для неблокирующей отправки:

select {
case ch <- value:
    // отправлено
default:
    // канал заполнен
}