Sobes.tech
Back to questions
Middle
7

Как работает select в Go? Как читать из нескольких каналов одновременно?

Companies where asked
YadroYadro

Answer from 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, либо сработает таймаут. Это позволяет эффективно обрабатывать несколько источников данных одновременно.