Middle
30
Как работает select в Go? Как читать из нескольких каналов одновременно?
Сұралған компаниялар
AI-дан жауап
sobes.tech AI
В Go оператор select используется для работы с несколькими каналами одновременно. Он позволяет ждать операций чтения или записи на нескольких каналах и реагировать на ту, которая готова первой.
Когда вы используете select, Go блокируется до тех пор, пока один из каналов не станет доступен для операции (чтения или записи). После этого выполняется соответствующий блок кода.
Пример чтения из нескольких каналов:
ch1 := make(chan int)
ch2 := make(chan int)
// Запускаем горутины, которые отправляют данные
go func() { ch1 <- 1 }()
go func() { ch2 <- 2 }()
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, либо сработает таймаут. Это позволяет эффективно обрабатывать несколько источников данных одновременно.