Sobes.tech
Назад к вопросам
Middle
3

Что такое каналы в Go и оператор select?

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

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

sobes.tech AI

В Go каналы (channels) — это механизм для передачи данных между горутинами, обеспечивающий синхронизацию и обмен сообщениями.

Канал создаётся с помощью функции make и может быть буферизированным или небезопасным (без буфера). Через канал можно отправлять и получать значения определённого типа.

Оператор select позволяет одновременно ждать нескольких операций с каналами и реагировать на ту, которая станет доступна первой. Это удобно для организации конкурентного поведения и таймаутов.

Пример:

ch1 := make(chan int)
ch2 := make(chan int)

// Запускаем горутину, которая отправит данные в ch1
go func() {
    ch1 <- 1
}()

select {
case val := <-ch1:
    fmt.Println("Получено из ch1:", val)
case val := <-ch2:
    fmt.Println("Получено из ch2:", val)
case <-time.After(time.Second):
    fmt.Println("Таймаут")
}

Здесь select ждёт данные из ch1 или ch2, либо таймаут через 1 секунду.