Ответ
Горутина заблокируется до тех пор, пока в буфере не освободится место. Это стандартное поведение небуферизированных и заполненных буферизированных каналов.
Пример:
ch := make(chan int, 1) // буфер на 1 элемент
ch <- 1 // записываем первое значение (буфер заполнен)
ch <- 2 // блокировка - горутина ждет, пока кто-то не прочитает из канала
Чтобы избежать блокировки, можно использовать select с default:
select {
case ch <- 2: // попытка записи
default: // выполнится, если буфер полон
fmt.Println("Channel full, skipping")
}