Goを学んでいて、チャネルで躓いています。
以下のコードで、以下の点に疑問があります。
・Goroutineの無限ループが、なぜ終了するのか、わかりません。
・Goroutineの無限ループが、mainのループ(for i < 1000)と同期している様に、0\n1\n......999\nと、数字が重複せずに出力されるのか、わかりません。⇦(「i := <- ch 」で、受信を待ち続ける?つまり処理が止まってる?であるなら、なぜ終了できるのか)
どなたか教えていただけると嬉しいです。
Go
1package main 2 3import ( 4 "fmt" 5) 6 7func main() { 8 ch := make(chan int) 9 go receiver(ch) 10 i := 0 11 for i < 1000 { 12 ch <- i // チャネルにデータ送る 13 i++ 14 } 15} 16 17func receiver(ch <-chan int) { 18 for { // チャネルへデータがきたら回る 19 i := <- ch // チャネルからデータを受取 20 fmt.Println(i) 21 } 22}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。