Goプログラミングによるセレクトチャネルを使用した高並行性の達成
Go言語ではselect文で高並行なチャネル間の通信を実現する。select文はswitch文に似ているが、各case文は通信操作となる。
大変便利なチャネル通信の高並列化を実現できる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"
}()
select {
case msg1 := <-ch1:
fmt.Println("Received:", msg1)
case msg2 := <-ch2:
fmt.Println("Received:", msg2)
case <-time.After(3 * time.Second):
fmt.Println("Timeout")
}
}
上のコードで、`ch1` と `ch2` という2つのチャンネルを作成しました。その後、2つのgoroutineを起動して、一定時間後に `ch1` と `ch2` にそれぞれメッセージを送信します。select文では、case文を使用して2つのチャンネルからメッセージを受信し、チャンネルのいずれかがメッセージを受信すると対応するcase文が実行されます。3秒以内にメッセージを受信できなかった場合は、select文は `time.After` のcase文を実行し、”Timeout”というメッセージを表示します。
select文を用いることで複数のChannelのメッセージを同時にlistenし、高並行性なChannel通信を実現できます。