|
Go rutina (goroutine) je lehčí verze běhového vlákna nabízeného operačním systémem. |
|
![]()
package main
|
|
import (
"fmt"
"time"
)
|
|
func f(od string) {
for i := range 3 {
fmt.Println(od, ":", i)
}
}
|
|
func main() {
|
|
|
Předpokládejme že máme volání funkce call |
f("přímo")
|
|
Pro zavolání této funkce v gorutině, použijte
|
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. Počkáme, až skončí (pro spolehlivější přístup použijte WaitGroup). |
time.Sleep(time.Second)
fmt.Println("hotovo")
}
|
|
Když spustíme tento program, nejdřív uvidíme výstup blokujícího volání, potom výstup ze dvou gorutin. Výstup gorutin může být prokládaný, protože gorutiny jsou spuštěné prováděcím prostředím Go souběžně. |
$ go run goroutines.go
přímo : 0
přímo : 1
přímo : 2
gorutina : 0
gorutina : 1
gorutina : 2
jdeme
hotovo
|
|
Jako další se podíváme na doplněk ke gorutinám v konkurentních programech: kanály. |
Další příklad: Kanály.