Что будет с горутиной, если попытаться записать значение в заполненный буфер

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

Ответ

Горутина заблокируется до тех пор, пока в буфере не освободится место. Это стандартное поведение небуферизированных и заполненных буферизированных каналов.

Пример:

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

Чтобы избежать блокировки, можно использовать select с default:

select {
case ch <- 2: // попытка записи
default:      // выполнится, если буфер полон
    fmt.Println("Channel full, skipping")
}