Sobes.tech
Назад к вопросам
Junior — Middle
78

Как себя ведет программа при попытке записать данные в канал без буфера, если он изначально пуст?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

В Go канал без буфера (buffer size = 0) является синхронным. Это значит, что при попытке записать данные в такой канал, если в этот момент нет готового получателя, программа блокируется и ждёт, пока другой горутина не прочитает значение из канала.

То есть запись в канал без буфера не происходит мгновенно, а требует одновременного приёма. Это обеспечивает синхронизацию между отправителем и получателем.

Пример:

ch := make(chan int) // канал без буфера

// Отправка в отдельной горутине
go func() {
    ch <- 42 // блокируется, пока кто-то не прочитает
}()

// Чтение
val := <-ch // после чтения отправка разблокируется
fmt.Println(val)