Avatar ·

Cómo escuchar N canales en Go: ¿select dinámico para un número arbitrario de canales?

¡Hola a todos! Estoy aprendiendo Go y me encontré con un problema. Estoy escribiendo una utilidad que procesa eventos de varias fuentes de datos. Cada fuente funciona en su propia gorutina y envía datos a su propio canal. La cantidad de fuentes no se conoce de antemano y puede cambiar durante la ejecución del programa (el usuario puede agregar/eliminar fuentes). En Go existe la construcción `select`, que permite escuchar varios canales simultáneamente. Pero es estática: es necesario especificar todos los `case` de antemano: ```go select { case msg1 := <-ch1: // procesamiento case msg2 := <-ch2: // procesamiento case msg3 := <-ch3: // procesamiento } ``` ¿Qué hacer si tengo un slice de canales `[]chan int` y su cantidad puede ser 5, 10 o 100? ¿Cómo escribir un `select` dinámico que funcione con un número arbitrario de canales? Intenté usar reflexión (reflect.Select), pero no estoy seguro de que sea correcto. ¿Quizás hay una forma más idiomática? Por favor, indíquenme cómo resolver esta tarea correctamente en Go.