Sobes.tech
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")