> Что происходит при чтении из пустого буферизованного канала в Go и записи в него другой горутиной (Go)

Уровень: senior · Роль: backend · Категория: Технические вопросы

Компании: Ozon

Стек: Go

> Пример ответа

При чтении из пустого буферизованного канала горутина блокируется до тех пор, пока другая горутина не запишет в него значение. Как только запись происходит, читающая горутина немедленно получает это значение и продолжает выполнение. Если канал буферизован и не пуст, чтение не блокируется - извлекается первый элемент из буфера.

Пример:

GO
ch := make(chan int, 2) // буферизованный канал ёмкостью 2
go func() {
time.Sleep(100 * time.Millisecond)
ch <- 42
}()
val := <-ch // блокируется, пока другая горутина не запишет 42
fmt.Println(val) // 42

Важно: чтение из пустого небуферизованного канала также блокируется, но в этом случае требуется одновременная готовность и читающей, и пишущей горутины. При буферизации блокировка снимается, как только в буфере появляется хотя бы один элемент.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью