在Go中,可以使用select
语句来遍历多个通道。select
语句可以同时监听多个通道的操作,并在其中任意一个通道准备就绪时执行相应的操作。
下面是一个使用select
语句遍历多个通道的示例:
package main
import (
"fmt"
)
func main() {
// 创建两个通道
ch1 := make(chan int)
ch2 := make(chan int)
// 向第一个通道发送数据
go func() {
for i := 0; i < 5; i++ {
ch1 <- i
}
close(ch1)
}()
// 向第二个通道发送数据
go func() {
for i := 100; i < 105; i++ {
ch2 <- i
}
close(ch2)
}()
// 遍历多个通道
for {
select {
case v, ok := <-ch1:
if !ok {
ch1 = nil
} else {
fmt.Println("From ch1:", v)
}
case v, ok := <-ch2:
if !ok {
ch2 = nil
} else {
fmt.Println("From ch2:", v)
}
}
// 判断所有通道是否已关闭
if ch1 == nil && ch2 == nil {
break
}
}
}
在上面的示例中,我们创建了两个通道ch1
和ch2
,并向每个通道发送一些数据。然后使用select
语句遍历这两个通道,当其中任意一个通道准备就绪时,我们就从该通道中读取数据并打印出来,直到所有通道都关闭为止。