Aus einer ausgewählten Aussage ausbrechen, wenn alle Kanäle geschlossen sind
Frage:
Wie Können Sie effizient mehrere unabhängige Goroutinen durchlaufen, die Daten über Kanäle produzieren, bis alle Kanäle geschlossen sind, und aufhören zu verbrauchen, wenn die Kanäle erschöpft sind? Ausgabe?
Antwort:
Die Verwendung einer Select-Anweisung verbraucht normalerweise Daten von mehreren Kanälen, aber festzustellen, wann alle Kanäle geschlossen sind, kann schwierig sein. Hier ist eine kurze Möglichkeit, damit umzugehen:
for { select { case p, ok := <-mins: if !ok { // channel is closed mins = nil // set channel to nil } else { fmt.Println("Min:", p) } case p, ok := <-maxs: if !ok { maxs = nil } else { fmt.Println("Max:", p) } } if mins == nil && maxs == nil { break // exit loop when all channels are nil } }
Der Trick besteht darin, den geschlossenen Kanal auf Null zu setzen, um eine weitere Auswahl darauf zu vermeiden. Dadurch wird sichergestellt, dass die Select-Anweisung weiter ausgeführt wird und die verbleibenden offenen Kanäle überprüft.
Vorteile:
Das obige ist der detaillierte Inhalt vonWie kann ich aus einer Select-Anweisung ausbrechen, wenn alle Kanäle geschlossen sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!