|
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.