Translate

sábado, 5 de octubre de 2019

Goroutines

Continuamos con en go

Supongamos que tenemos que llamar una función de forma asíncrona en Go, para eso son las goroutines, veamos un ejemplo : 

package main

import (
    "fmt"
    "time"
)

func f(from string) {
    for i := 0; i < 3; i++ {
        fmt.Println(from, ":", i)
    }
}

func main() {

    f("direct")

    go f("goroutine")

    go func(msg string) {
        fmt.Println(msg)
    }("going")

    time.Sleep(time.Second)
    fmt.Println("done")
}

Como se ve, llamamos una función de forma directa sincrona, y otras 2 con goroutines. El resultado va ser : 

$ go run goroutines.go
direct : 0
direct : 1
direct : 2
goroutine : 0
going
goroutine : 1
goroutine : 2
done

Si venimos de lenguajes como C podemos decir que Go con las goroutines crea un hilo por geroutin.