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

Каким образом осуществляется передача информации между горутиной и небуферизованным каналом фиксированной емкости 1?

Компании, где спрашивали
МТС DigitalМТС Digital

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

sobes.tech AI

В Go канал с емкостью 1 — это буферизованный канал, который может хранить ровно один элемент. Если канал небуферизованный (емкость 0), то передача блокируется до получения.

При емкости 1 передача происходит так:

  • Если канал пуст, горутина отправитель записывает значение в буфер и продолжает работу (не блокируется).
  • Если буфер занят (уже есть элемент), горутина отправитель блокируется до тех пор, пока получатель не прочитает значение из канала.

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

Пример:

ch := make(chan int, 1) // канал с емкостью 1

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

// Получатель
val := <-ch
fmt.Println("Получено", val)

Если отправитель пытается отправить второй элемент, пока первый не прочитан, он заблокируется.