Sobes.tech
Junior — Middle

Já utilizou o mecanismo de sincronização com sync.WaitGroup nos seus projetos?

sobes.tech IA

Resposta da IA

Sim, em projetos em Go, frequentemente se usa sync.WaitGroup para sincronizar goroutines. Este mecanismo permite esperar que um grupo de tarefas paralelas seja concluído antes de continuar.

Princípio de funcionamento:

  • Cria-se um objeto WaitGroup.
  • Antes de iniciar cada goroutine, chama-se Add(1) para incrementar o contador.
  • Dentro da goroutine, após concluir o trabalho, chama-se Done(), que diminui o contador.
  • A goroutine principal chama Wait(), que fica bloqueada até que o contador seja zero.

Exemplo:

var wg sync.WaitGroup

wg.Add(2) // esperamos 2 goroutines

go func() {
    defer wg.Done()
    // trabalho da primeira goroutine
}()

go func() {
    defer wg.Done()
    // trabalho da segunda goroutine
}()

wg.Wait() // esperamos ambas terminarem

Isso é útil para coordenar operações paralelas e evitar que o programa termine prematuramente.