在Go中,可以使用select
語句來遍歷多個(gè)通道。select
語句可以同時(shí)監(jiān)聽多個(gè)通道的操作,并在其中任意一個(gè)通道準(zhǔn)備就緒時(shí)執(zhí)行相應(yīng)的操作。
下面是一個(gè)使用select
語句遍歷多個(gè)通道的示例:
package main
import (
"fmt"
)
func main() {
// 創(chuàng)建兩個(gè)通道
ch1 := make(chan int)
ch2 := make(chan int)
// 向第一個(gè)通道發(fā)送數(shù)據(jù)
go func() {
for i := 0; i < 5; i++ {
ch1 <- i
}
close(ch1)
}()
// 向第二個(gè)通道發(fā)送數(shù)據(jù)
go func() {
for i := 100; i < 105; i++ {
ch2 <- i
}
close(ch2)
}()
// 遍歷多個(gè)通道
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)
}
}
// 判斷所有通道是否已關(guān)閉
if ch1 == nil && ch2 == nil {
break
}
}
}
在上面的示例中,我們創(chuàng)建了兩個(gè)通道ch1
和ch2
,并向每個(gè)通道發(fā)送一些數(shù)據(jù)。然后使用select
語句遍歷這兩個(gè)通道,當(dāng)其中任意一個(gè)通道準(zhǔn)備就緒時(shí),我們就從該通道中讀取數(shù)據(jù)并打印出來,直到所有通道都關(guān)閉為止。