Go como usar Goroutines

Un Goroutine es un hilo de ejecución ligero manejado por GO.

Gorutine son funciones o métodos que se ejecutan simultáneamente.

Podemos entenderlas como “hilos ligeros” con un costo mucho menor que un hilo tradicional.

Supongamos que tienes dos funciones

func numbers() {
    for i := 0; i < 5; i++ {
        fmt.Printf("%d ", i)
        time.Sleep(100 * time.Millisecond)
    }
}

func characters() {
    for i := 'a'; i <= 'f'; i++ {
        fmt.Printf("%c ", i)
        time.Sleep(200 * time.Millisecond)
    }
}

Si llamas a estas funciones de la forma habitual tendrías este resultado.

func main() {

    // without goroutine
    numbers()

    characters()

    fmt.Scanln() // wait, press a key
    fmt.Println("done")
}

Observa cómo la ejecución de estas funciones es síncrona

go run rutine.go
0 1 2 3 4 a b c d e f
done

Como implementar Goroutine

Si deseas invocar estas funciones en una Goroutine debes usar “go” por delante de la llamada a la función de esta manera:

func main() {
    // goroutine
    go numbers()

    go characters()

    fmt.Scanln() // wait, press a key
    fmt.Println("done")
}

En la salida se ve como se van ejecutando ambas funciones de manera simultánea, lo que evidencia esta ejecución en paralelo de ambas rutinas.

go run rutine.go
0 a 1 2 b 3 c 4 d e f

Conclusión:

Cuando ejecutas este código sin Goroutine vemos que las funciones se ejecutan una primero y luego la otra, sincrónicamente.

Utilizando Goroutine, anteponiendo “go” por delante a la llamada, puedes observar que la salida de las funciones se va intercalando mostrando que se ejecutan al mismo tiempo.

go  golang