Go podle Příkladů: Gorutiny

Go rutina (goroutine) je lehčí verze běhového vlákna nabízeného operačním systémem.

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

Předpokládejme že máme volání funkce call f(s). Takto bychom ji spustili obvyklým způsobem, kdy poběží synchronně.

    f("přímo")

Pro zavolání této funkce v gorutině, použijte go f(s). Tato nová gorutina poběží současně s volající gorutinou (main).

    go f("gorutina")

Také je možné nastartovat gorutinu pro anonymní volání funkce.

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

Naše dvě volání funkcí teď běží asynchronně v oddělených gorutinách, takže provádění propadne až sem. Tato funkce Scanln vyžaduje stlačení klávesy než program skončí.

    fmt.Scanln()
    fmt.Println("hotovo")
}

Když zapneme tento program, nejdřív uvidíme výstup blokujícího volání, potom uvidíme prokládaný výstup ze dvou gorutin. Toto prokládání odráží že gorutiny jsou spuštěné prováděcím prostředím Go současně.

$ go run goroutines.go
přímo : 0
přímo : 1
přímo : 2
gorutina : 0
gorutina : 1
gorutina : 2
jdeme
<enter>
hotovo

Jako další se podíváme na doplněk ke gorutinám v konkurentních programech: kanály.

Další příklad: Kanály.