Dies ist ähnlich wie go tutorial select statement, aber ich habe keine Antwort von diesem Beitrag erhalten. Also habe ich hier gefragt. Danke für die Antwort.warum Golang Select-Anweisung wählt nicht zufällig einen Fall
In http://tour.golang.org/concurrency/5, scheint es "case c < - x:" ist immer bereit, was bedeutet, dass dieser Fall Select Anweisung nicht blockieren wird.
Basierend auf dem Satz "A wählen Blöcke, bis einer seiner Fälle ausgeführt werden kann, dann führt es diesen Fall aus. Es wählt einen zufällig, wenn mehrere bereit sind.", Wenn "case < -quit:" auch bereit ist, Die Select-Anweisung sollte nach dem Zufallsprinzip aus "case c < - x:" und "case < -quit:" ausgewählt werden. Aber das Programm geht immer in den "case < -quit:" Fall.
Ich änderte auch den Auswahlblock, um wie folgt zu sein. Dann in den ersten 10 Schleifen, das Programm nach dem Zufallsprinzip drucken 1-6, aber das Programm beendet einmal (die 11. Ausgabe) der Quit-Kanal hat den Wert 0.
Meine Frage ist, dass, wenn die fertigen Fälle zufällig ausgewählt sind, warum ist die elfte Auswahl immer der quit-Fall?
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
}
Aber 'c <- x' ist * nicht * bereit, im Beispiel, wenn' quit' ist (basierend auf dem Beispiel, mit dem Sie verknüpft haben). Benutzt du denselben Code von der Tour? – JimB
@JimB Ich verstehe nur, dass der c-Kanal ungepuffert ist. Vielen Dank! – shiningdo