Uma goroutine é uma leve thread de execução. |
|
package main |
|
import ( "fmt" "time" ) |
|
func f(from string) { for i := 0; i < 3; i++ { fmt.Println(from, ":", i) } } |
|
func main() { |
|
Supondo que se pretenda chamar a função |
f("direct") |
Para invocar esta função de maneira assíncrona,
em uma goroutine, usa-se |
go f("goroutine") |
Também é possível iniciar uma goroutine a partir de uma chamada de função anônima. |
go func(msg string) { fmt.Println(msg) }("going") |
As duas chamadas de funções estão rodando assincronamente em goroutines separadas. Para uma apresentação mais detalhada, veja WaitGroups. |
time.Sleep(time.Second) fmt.Println("done") } |
Ao rodar este programa, primeiro é visualizada a saída das chamadas bloqueantes, síncronas, e só então a saída das duas goroutines. A saída de goroutines podem ser exibidas em ordem diversa da disposta no código, justamente porque goroutines são executadas concorrentemente pelo runtime de Go. |
$ go run goroutines.go direct : 0 direct : 1 direct : 2 goroutine : 0 going goroutine : 1 goroutine : 2 done |
Em seguida veremos um complemento às goroutines em programas Go que utilizam concorrência: canais. |
Próximo exemplo: Channels.