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

Где сохраняется значение переменной при отправке данных в канал без буфера?

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

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

sobes.tech AI

В Go, при отправке значения в канал без буфера (unbuffered channel), значение не сохраняется внутри канала, а передаётся напрямую от отправителя к получателю.

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

Пример:

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

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

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

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