Go · Essencial · Inglês · Técnico
WaitGroup
Tipo do pacote sync que espera um conjunto de goroutines terminar. Add soma tarefas, Done conclui uma e Wait bloqueia até o contador zerar.
Onde usar
Aparece quando o programa dispara várias goroutines e precisa aguardar todas antes de seguir. Chamar Add dentro da goroutine, em vez de antes dela, é bug clássico de review.
Em código
var wg sync.WaitGroup
wg.Add(2)
go func() { defer wg.Done(); a() }()
go func() { defer wg.Done(); b() }()
wg.Wait() // espera as duasExemplos
Call wg.Add before starting the goroutine, not inside it.
Chame wg.Add antes de iniciar a goroutine, não dentro dela.
Main waits on the WaitGroup until every worker is done.
A main espera no WaitGroup até todos os workers terminarem.
Cuidado
Não copie um WaitGroup depois de usá-lo; passe um ponteiro, senão cada cópia tem seu próprio contador.