typestar

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

  1. Una goroutine por entrada copia hacia la salida compartida.
  2. Un WaitGroup decide cuándo es seguro cerrar la salida.
  3. La goroutine que cierra no debe ser una de las que copian.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 3 de 5 en Patrones; paso 21 de 25 en Concurrencia.

← Anterior Siguiente →