これはgo tutorial select statementと似ていますが、その投稿からの回答は得られませんでした。だから私はここで尋ねた。回答ありがとうございます。golang select文がランダムにケースを選択しない理由
http://tour.golang.org/concurrency/5では、「case c <-x:」は常に準備ができているようです。つまり、このケースではselect文がブロックされません。
文に基づいて、あるケースが実行できるようになるまでブロックを選択すると、そのケースが実行されます。複数のものが用意できれば、無作為に1つを選択します。 "、" case < -quit: select文は "case c < - x:"と "case < -quit:"からランダムに選択する必要があります。しかし、プログラムは常に "case < -quit:"ケースに入ります。
また、selectブロックを以下のように変更しました。最初の10回のループでは、プログラムはランダムに1-6を出力しますが、プログラムは1回終了します(11回目の出力)終了チャネルの値は0です。
私の質問は、なぜ11番目の選択がいつも終了しているのはなぜですか。 case文で
select {
case c <- 1:
x, y = y, x+y
case c <- 2:
x, y = y, x+y
case c <- 3:
x, y = y, x+y
case c <- 4:
x, y = y, x+y
case c <- 5:
x, y = y, x+y
case c <- 6:
x, y = y, x+y
case <-quit:
fmt.Println("quit")
return
}
しかし、 'C < - X 'は、いつ'の例では*ありません*準備ができていますquit'は(リンク先の例に基づいて)です。あなたはツアーの同じコードを使用していますか? – JimB
@JimB私はCチャンネルがバッファされていないことを理解しています。ありがとう! – shiningdo