Junior
¿Para qué se utiliza WaitGroup en Go?
sobes.tech AI
Respuesta de la IA
WaitGroup se utiliza para sincronizar el trabajo de una o varias goroutines. Permite que la goroutine principal espere a que otras goroutines creadas terminen su ejecución. Consiste en un contador que aumenta cuando se crea una goroutine y disminuye cuando esta finaliza.
Métodos principales:
Add(delta int): Incrementa o decrementa el contador de goroutines.Done(): Disminuye el contador en 1. Generalmente se llama al final de la goroutine (a menudo usandodefer).Wait(): Bloquea la ejecución hasta que el contador llegue a cero.
Ejemplo de uso:
package main
import (
"fmt"
"sync"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Disminuye el contador al finalizar la goroutine
fmt.Printf("Goroutine %d comienza\n", id)
// Simulación de trabajo
// time.Sleep(time.Second)
fmt.Printf("Goroutine %d termina\n", id)
}
func main() {
var wg sync.WaitGroup // Crear WaitGroup
for i := 1; i <= 5; i++ {
wg.Add(1) // Incrementar el contador por cada goroutine
go worker(i, &wg) // Iniciar la goroutine, pasando el puntero a WaitGroup
}
wg.Wait() // Esperar hasta que el contador sea 0 (todas las goroutines terminen)
fmt.Println("Todas las goroutines han terminado")
}