Sobes.tech
Назад к вопросам
Senior
7

Как происходит передача данных через небуферизированный канал? Есть ли у него буфер?

Компании, где спрашивали
AstonAston

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

sobes.tech AI

В Go небуферизированный канал (unbuffered channel) не имеет внутреннего буфера, поэтому передача данных через него происходит синхронно. Это значит, что отправляющая горутина блокируется до тех пор, пока другая горутина не примет значение из канала, и наоборот — принимающая горутина блокируется, если в канале нет значения.

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

Пример:

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

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

// Принимающая горутина
val := <-ch // блокируется, пока не появится значение
fmt.Println(val) // 42

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