Назад к вопросам
МТС Digital
Junior — Middle
83
Каким образом осуществляется передача информации между горутиной и небуферизованным каналом фиксированной емкости 1?
Компании, где спрашивали
Ответ от нейросети
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)
Если отправитель пытается отправить второй элемент, пока первый не прочитан, он заблокируется.