Junior
O que é WaitGroup em Go e para que é usado?
sobes.tech IA
Resposta da IA
WaitGroup é um mecanismo de sincronização em Go que permite aguardar a conclusão de um grupo de goroutines.
É utilizado para:
- Aguardar que todas as goroutines terminem antes de sair da função ou programa.
- Coordenar o trabalho entre várias goroutines.
Exemplo de uso:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Diminui o contador ao terminar a goroutine
fmt.Printf("Trabalhador %d começou\n", id)
time.Sleep(time.Second) // Simulação de trabalho
fmt.Printf("Trabalhador %d terminou\n", id)
}
func main() {
var wg sync.WaitGroup // Declara um WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Incrementa o contador antes de lançar cada goroutine
go worker(i, &wg)
}
wg.Wait() // Bloqueia a execução do main até que o contador seja 0
fmt.Println("Todos os trabalhadores terminaram")
}
Métodos principais:
Add(delta int): Incrementa o contador interno doWaitGroupemdelta. Deve ser chamado antes de lançar cada goroutine que se deseja acompanhar.Done(): Diminui o contador interno doWaitGroupem 1. Normalmente chamado comdeferdentro da goroutine para garantir a redução mesmo em caso de pânico.Wait(): Bloqueia a goroutine atual até que o contador interno doWaitGroupseja 0.