Junior — Middle
¿Puede explicar cómo se utiliza el mecanismo de espera para la finalización de varias goroutines en Go con WaitGroup?
sobes.tech AI
Respuesta de la IA
En Go, para esperar a que finalicen varias goroutines, se utiliza el tipo sync.WaitGroup. Permite "suscribirse" a varias goroutines y bloquear la ejecución hasta que todas hayan terminado.
Métodos principales de WaitGroup:
- Add(n int) — incrementa el contador en n, generalmente llamado antes de lanzar las goroutines.
- Done() — decrementa el contador en 1, llamado al final de cada goroutine.
- Wait() — bloquea la ejecución hasta que el contador llegue a 0.
Ejemplo de uso:
var wg sync.WaitGroup
wg.Add(3) // esperamos 3 goroutines
for i := 0; i < 3; i++ {
go func(id int) {
defer wg.Done() // señalamos la finalización
fmt.Printf("Goroutine %d en ejecución\n", id)
// algún trabajo
}(i)
}
wg.Wait() // esperamos a que todas las goroutines terminen
fmt.Println("Todas las goroutines han finalizado")