Goroutines
Uma goroutine é uma function leve que roda de forma independente, iniciada colocando go na frente de uma chamada de function. Goroutines são baratas — um programa Go pode rodar milhares delas ao mesmo tempo — e elas são parte central da própria linguagem, não uma biblioteca adicionada.
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
results := make([]int, 3)
for i := 0; i < 3; i++ {
wg.Add(1)
go func(index int) {
defer wg.Done()
results[index] = index * index
}(i)
}
wg.Wait()
fmt.Println(results)
}[0 1 4]
sync.WaitGroup é como main espera um grupo de goroutines terminar antes de continuar — wg.Add(1) registra uma goroutine para esperar, e cada goroutine chama wg.Done() quando termina; wg.Wait() bloqueia até que toda goroutine registrada tenha avisado.
A seguir: channels — como goroutines se comunicam entre si com segurança.
Practice exercise
Use um sync.WaitGroup para rodar uma goroutine que define uma variável result := 0 para 100, esperando ela terminar antes de imprimir result.