Heim  >  Artikel  >  Backend-Entwicklung  >  Wie liest man in Golang von mehreren Kanälen gleichzeitig?

Wie liest man in Golang von mehreren Kanälen gleichzeitig?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-07 10:31:03820Durchsuche

How do you read from multiple channels simultaneously in Golang?

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!

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