Go имеет оператор выбора, который работает на каналах. Из документации:
Оператор select позволяет ждать goroutine на нескольких сообщениях операции.
Выбирает блоки, пока один из его случаев не будет запущен, тогда он выполнит это дело. Он выбирает один случайным образом, если несколько готовы.
Есть ли эквивалент Python следующего кода:
package main
import "fmt"
func main() {
c1 := make(chan int)
c2 := make(chan int)
quit := make(chan int)
go func() {
for i := 0; i < 10; i++ {
c1 <- i
}
quit <- 0
}()
go func() {
for i := 0; i < 2; i++ {
c2 <- i
}
}()
for {
select {
case <-c1:
fmt.Println("Received value from c1")
case <-c2:
fmt.Println("Received value from c2")
case <-quit:
fmt.Println("quit")
return
}
}
}
Вывод этой программы:
Received value from c1
Received value from c1
Received value from c2
Received value from c1
Received value from c2
Received value from c1
Received value from c1
Received value from c1
Received value from c1
Received value from c1
Received value from c1
Received value from c1
quit