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

Объясните принцип функционирования небуферизованного канала передачи данных

Компании, где спрашивали
Эрливидео
Магнит Тех

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

sobes.tech AI

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

Это обеспечивает синхронизацию между горутинами: отправитель и получатель должны встретиться одновременно для передачи данных.

Пример:

ch := make(chan int) // небуферизованный канал

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

// Приём
val := <-ch // блокируется, пока кто-то не отправит
fmt.Println(val) // выведет 42

Такой канал полезен для синхронизации и передачи данных "по требованию" без буферизации.