在Go中,可以使用select
語句來監聽多個channel
的操作,并選擇第一個就緒的channel
進行處理。以下是使用select
語句進行并發編程的示例代碼:
package main
import (
"fmt"
"time"
)
func main() {
ch1 := make(chan string)
ch2 := make(chan string)
go func() {
time.Sleep(2 * time.Second)
ch1 <- "Hello"
}()
go func() {
time.Sleep(1 * time.Second)
ch2 <- "World"
}()
for i := 0; i < 2; i++ {
select {
case msg1 := <-ch1:
fmt.Println("Received from channel 1:", msg1)
case msg2 := <-ch2:
fmt.Println("Received from channel 2:", msg2)
}
}
}
在上面的示例中,我們創建了兩個channel
:ch1
和ch2
。然后,我們使用兩個goroutine
分別向這兩個channel
發送數據。goroutine
會等待一段時間后發送數據,以模擬耗時操作。
在主函數中,我們使用select
語句監聽兩個channel
的操作。當其中任意一個channel
有數據可讀時,select
語句會選擇第一個就緒的channel
進行處理。然后,我們打印接收到的數據。
最后,我們使用一個循環來多次執行select
語句,以確保能夠接收到兩個goroutine
發送的數據。
運行上述代碼,你會看到類似下面的輸出:
Received from channel 2: World
Received from channel 1: Hello
這表明我們成功地使用select
語句并發地接收了兩個channel
的數據。