Sobes.tech
Senior

Você decidiu escrever WaitGroup porque apareceu um canal ou porque decidiu escrever goroutines para alguma coisa?

sobes.tech IA

Resposta da IA

O WaitGroup em Go é usado para esperar que um grupo de goroutines termine.

Se tiver várias goroutines a executar tarefas em paralelo e precisar de esperar que todas terminem antes de continuar, o WaitGroup é uma ferramenta conveniente.

Os canais e as goroutines são mecanismos diferentes. Um canal serve para comunicação e sincronização entre goroutines, enquanto o WaitGroup serve para esperar que elas terminem.

Por exemplo, se tiver goroutines a realizar tarefas e quiser esperar que todas terminem, usa o WaitGroup:

var wg sync.WaitGroup
wg.Add(3) // espera por 3 goroutines

for i := 0; i < 3; i++ {
    go func(id int) {
        defer wg.Done()
        // trabalho da goroutine
        fmt.Println("Goroutine", id, "terminada")
    }(i)
}

wg.Wait() // espera que todas as goroutines terminem

Assim, o WaitGroup é usado exatamente porque há goroutines que precisam de sincronização na sua finalização, e não por causa do aparecimento de canais.