Wie man N Kanäle in Go abhört: dynamisches select für eine beliebige Anzahl von Kanälen?
Hallo zusammen! Ich lerne Go und bin auf ein Problem gestoßen. Ich schreibe ein Utility, das Ereignisse von mehreren Datenquellen verarbeitet. Jede Quelle läuft in einer eigenen Goroutine und sendet Daten an ihren eigenen channel. Die Anzahl der Quellen ist im Voraus unbekannt und kann sich während der Laufzeit des Programms ändern (der Benutzer kann Quellen hinzufügen/entfernen).
In Go gibt es das `select`-Konstrukt, mit dem man mehrere Kanäle gleichzeitig abhören kann. Aber es ist statisch – man muss alle `case`s im Voraus angeben:
```go
select {
case msg1 := <-ch1:
// Verarbeitung
case msg2 := <-ch2:
// Verarbeitung
case msg3 := <-ch3:
// Verarbeitung
}
```
Was aber, wenn ich ein Slice von Kanälen `[]chan int` habe und deren Anzahl 5, 10 oder 100 betragen kann? Wie schreibt man ein dynamisches `select`, das mit einer beliebigen Anzahl von Kanälen arbeitet?
Ich habe versucht, Reflexion (reflect.Select) zu verwenden, bin mir aber nicht sicher, ob das richtig ist. Gibt es vielleicht einen idiomatischeren Weg? Bitte sagt mir, wie man diese Aufgabe in Go richtig löst.