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

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

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

В 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)
}

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

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку