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

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

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

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

sobes.tech AI

В Go передача данных из горутины в буферизированный канал осуществляется с помощью операции отправки (chan <- value). Буферизированный канал имеет внутренний буфер фиксированного размера, который позволяет горутине отправлять несколько значений без немедленной блокировки, если буфер не заполнен.

Пример:

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

go func() {
    ch <- 1 // отправка значения в канал
    ch <- 2
    ch <- 3
    // если буфер заполнен, горутина заблокируется до освобождения места
}()

// Получение данных из канала
for i := 0; i < 3; i++ {
    val := <-ch
    fmt.Println(val)
}

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