在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
語句遍歷這兩個通道,當其中任意一個通道準備就緒時,我們就從該通道中讀取數據并打印出來,直到所有通道都關閉為止。