Fan-in en Go
Fusionar varios canales en uno, cerrando el resultado cuando todos terminan.
func merge(inputs ...<-chan int) <-chan int {
out := make(chan int)
var wg sync.WaitGroup
for _, input := range inputs {
wg.Go(func() {
for value := range input {
out <- value
}
})
}
go func() {
wg.Wait()
close(out)
}()
return out
}
Cómo funciona
- Una goroutine por entrada copia hacia la salida compartida.
- Un WaitGroup decide cuándo es seguro cerrar la salida.
- La goroutine que cierra no debe ser una de las que copian.
Palabras clave y builtins usados aquí
chancloseforfuncgointmakerangereturnvar
El intento, en números
- Líneas
- 18
- Caracteres a escribir
- 234
- Tokens
- 74
- Ritmo de tres estrellas
- 110 tpm
Al ritmo de tres estrellas de 110 tokens por minuto, este intento toma unos 40 segundos.
Paso 3 de 5 en Patrones; paso 21 de 25 en Concurrencia.