Назад к вопросам
VK
Middle
3
Что такое каналы в Go и оператор select?
Компании, где спрашивали
Ответ от нейросети
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 секунду.