以下のコードなのですが
fibonacciのforループ一週目でcチャネルに値が入る
↓
goルーチンのforループが一つ動く
↓
fibonacciのforループ2週目でcチャネルに値が入る
↓
goルーチンのforループがまた一つ動く
、
、
、
という流れなのかな?と思ったのですが出力を見た感じ違うようです。どのような流れの処理になっているのでしょうか?
go
1package main 2 3import "fmt" 4 5func fibonacci(c, quit chan int) { 6 x, y := 0, 1 7 8 for { 9 select { 10 case c <- x: 11 x, y = y, x+y 12 fmt.Println("フィボナッチの方") 13 case <-quit: 14 fmt.Println("quit") 15 return 16 } 17 } 18} 19 20func main() { 21 c := make(chan int) 22 quit := make(chan int) 23 go func() { 24 for i := 0; i < 10; i++ { 25 fmt.Println(<-c) 26 fmt.Println("Goルーチンの方") 27 28 } 29 quit <- 8 30 }() 31 fibonacci(c, quit) 32}
実行結果
0 Goルーチンの方 フィボナッチの方 フィボナッチの方 1 Goルーチンの方 1 Goルーチンの方 フィボナッチの方 フィボナッチの方 2 Goルーチンの方 3 Goルーチンの方 フィボナッチの方 フィボナッチの方 5 Goルーチンの方 8 Goルーチンの方 フィボナッチの方 フィボナッチの方 13 Goルーチンの方 21 Goルーチンの方 フィボナッチの方 フィボナッチの方 34
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/09/29 07:30