Как происходит зависание при заполнении буффера

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

Ответ

В Go зависание при заполнении буфера возникает, когда канал заполнен и нет получателя. Например, небуферизованный канал блокирует отправителя до появления получателя, а буферизованный — только когда буфер заполнен.

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

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

Решение — либо увеличить буфер, либо использовать select с default для неблокирующей отправки:

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

Также можно запустить получателя в отдельной горутине. Важно проектировать систему так, чтобы не допускать бесконечных блокировок.