Avatar ·

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 Tool, das Ereignisse von mehreren Datenquellen verarbeitet. Jede Quelle läuft in einer eigenen Goroutine und sendet Daten an ihren eigenen Kanal. 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).\n\nIn Go gibt es das `select`-Konstrukt, mit dem man mehrere Kanäle gleichzeitig abhören kann. Aber es ist statisch – man muss alle `case`-Anweisungen im Voraus angeben:\n\n```go\nselect {\ncase msg1 := <-ch1:\n // Verarbeitung\ncase msg2 := <-ch2:\n // Verarbeitung\ncase msg3 := <-ch3:\n // Verarbeitung\n}\n```\n\nWas aber, wenn ich ein Slice von Kanälen `[]chan int` habe und deren Anzahl 5, 10 oder 100 betragen kann? Wie schreibe ich ein dynamisches `select`, das mit einer beliebigen Anzahl von Kanälen funktioniert?