Ответ
При переполнении буферизованного канала (когда количество отправленных значений превышает его емкость) операция отправки блокируется до тех пор, пока другая горутина не прочитает данные из канала. Для небуферизованных каналов отправка блокируется сразу, пока получатель не будет готов.
Пример с буферизованным каналом:
ch := make(chan int, 2)
ch <- 1
ch <- 2
ch <- 3 // Блокируется, пока значение не будет прочитано
Можно использовать select с default для неблокирующей отправки:
select {
case ch <- value:
// отправлено
default:
// канал заполнен
}