Heim >Backend-Entwicklung >Golang >Wie kann ich aus einer Select-Anweisung ausbrechen, wenn alle Kanäle geschlossen sind?

Wie kann ich aus einer Select-Anweisung ausbrechen, wenn alle Kanäle geschlossen sind?

DDD
DDDOriginal
2024-11-15 20:41:03275Durchsuche

How to Break Out of a Select Statement When All Channels Are Closed?

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:

  • Verarbeitet mehrere unabhängige Kanäle effizient.
  • Vermeidet übermäßige bedingte Prüfungen oder Zeitüberschreitungen.
  • Einfach und prägnant Umsetzung.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn