select文
【開発環境】
OS:Win11(64ビット)
go version go1.19.4 windows/amd64
VSCode1.72.2、及びコマンドプロンプト
◆select文
select文はチヤンネルの送受に応じて処理を切り替える事ができる。
例1
select {
case v1 = <-ch1:
//ch1から受け取ったv1に保存された値を使う
case v2 = <-ch2:
//ch2に値v2を送信する
default:
//通信がない時
・サンプルコード
// selchan.go
package main
import (
"fmt"
"time"
)
func main() {
//チャンネルを作る
ch1 := make(chan rune)
ch2 := make(chan int)
done := make(chan bool)
//ゴルーチン
go func () {
s := "ABCDEFG"
for _, c := range s{
time.Sleep(10 * time.Millisecond)
fmt.Printf("ch1から送電:%c\n",c)
ch1 <- c
}
done <- true //終わったらtrueを送る
}()
//ゴルーチン数値を送る
go func () {
for i := 0;i < 0;i++ {
time.Sleep(8 * time.Millisecond)
fmt.Printf("ch2から送信:%d\n",i)
ch2 <- i+1
}
done <- true //終わったらtureを送る
}()
defer fmt.Println("終了")
count := 0
//メインルーチンで受け取ったデータを出力
for {
select {
case r := <-ch1:
fmt.Printf("ch1から受信:%d\n",r)
case n := <-ch2:
fmt.Printf("ch2から受信:%d\n",n)
case <-done: // trueが2個送られたら終了
count++
if count > 1{
return
}
}
}
}
・実行
PS D:\GO言語\サンプルプログラム\Go-8> go run selchan.go
ch1から送電:A
ch1から受信:65
ch1から送電:B
ch1から受信:66
ch1から送電:D
ch1から受信:68
ch1から送電:E
ch1から受信:69
ch1から送電:F
ch1から受信:70
ch1から送電:G
ch1から受信:71
終了