Heim > Artikel > Backend-Entwicklung > Wie liest man in Golang von mehreren Kanälen gleichzeitig?
Mehrere Kanäle gleichzeitig in Golang lesen
Wenn Sie in die Welt von Golang eintauchen, stehen Sie möglicherweise vor der Aufgabe, ein Any-to zu erstellen -ein Kanal, in dem mehrere Goroutinen in ein einziges Ziel eingespeist werden. Dieser Artikel befasst sich mit Strategien, um dies in Golang zu erreichen.
Beispielszenario
Stellen Sie sich ein Szenario vor, in dem zwei Goroutinen, numgen1 und numgen2, gleichzeitig Zahlen generieren und in diese schreiben Kanäle num1 bzw. num2. Ihr Ziel ist es, einen separaten Prozess, addnum, zu erstellen, der die von num1 und num2 empfangenen Zahlen summiert und die Ergebnisse in eine Kanalsumme schreibt.
Verwenden einer Select-Anweisung
Um von mehreren Kanälen gleichzeitig zu lesen, können Sie eine Select-Anweisung verwenden. Innerhalb des Auswahlblocks stellt jeder Fall einen Kanal dar, von dem Sie lesen möchten. Der erste Fall, der eine Nachricht empfängt, führt den entsprechenden Codeblock aus.
Hier ist ein Beispiel mit der Select-Anweisung:
func main() { c1 := make(chan int) c2 := make(chan int) out := make(chan int) go func(in1, in2 <-chan int, out chan<- int) { for { sum := 0 select { case sum = <-in1: sum += <-in2 case sum = <-in2: sum += <-in1 } out <- sum } }(c1, c2, out) }
Diese Goroutine wird auf unbestimmte Zeit ausgeführt und liest und summiert kontinuierlich Werte aus Kanälen c1 und c2. Der Out-Kanal bietet die Möglichkeit, die Beträge zu verbrauchen. Um die Goroutine zu beenden, müssten Sie sowohl c1 als auch c2 schließen und dann vor dem Beenden schließen.
Das obige ist der detaillierte Inhalt vonWie liest man in Golang von mehreren Kanälen gleichzeitig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!