Go言語による非同期処理方法
Go言語では、チャネルの非同期操作を処理するためにselect文を使用できます。select文は、複数のチャネルの操作を同時に監視し、いずれかのチャネルの準備が整い次第、対応する操作を実行します。
以下に、非同期処理を行う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(msg1)
case msg2 := <-ch2:
fmt.Println(msg2)
}
}
上の例では、2つのチャンネルch1とch2を作成し、2つのgoroutineを使用してそれぞれのチャンネルにメッセージを送信します。 select文を使用して2つのチャンネルを監視し、どちらかのチャンネルが準備できたら、対応する操作を実行します。
time.Sleepを使って処理の遅延をシミュレートしています。ch2のメッセージが先に準備できたら「World」とプリントされ、ch1のメッセージが先に準備できたら「Hello」とプリントされます。
select文はケース分岐のうち一つだけを実行することに注意してください。複数チャネルが同時に準備完了すると、ランダムに一つ分岐を選択して実行されます。どのチャネルも準備完了でない場合、select文はチャネルが準備完了するまでブロックして待機します。