Junior
¿Qué es WaitGroup en Go y para qué se utiliza?
sobes.tech AI
Respuesta de la IA
WaitGroup es un mecanismo de sincronización en Go que permite esperar a que finalice un grupo de goroutines.
Se utiliza para:
- Esperar a que todas las goroutines terminen antes de salir de la función o programa.
- Coordinar el trabajo entre varias goroutines.
Ejemplo de uso:
package main
import (
"fmt"
"sync"
"time"
)
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // Disminuye el contador al finalizar la goroutine
fmt.Printf("Trabajador %d comenzó\n", id)
time.Sleep(time.Second) // Simulación de trabajo
fmt.Printf("Trabajador %d terminó\n", id)
}
func main() {
var wg sync.WaitGroup // Declaramos WaitGroup
numWorkers := 3
for i := 1; i <= numWorkers; i++ {
wg.Add(1) // Incrementamos el contador antes de lanzar cada goroutine
go worker(i, &wg)
}
wg.Wait() // Bloquea la ejecución de main hasta que el contador llegue a 0
fmt.Println("Todos los trabajadores han terminado")
}
Métodos principales:
Add(delta int): Incrementa el contador interno deWaitGroupendelta. Debe ser llamado antes de lanzar cada goroutine que se desea seguir.Done(): Disminuye el contador interno deWaitGroupen 1. Normalmente se llama endeferdentro de la goroutine para garantizar que se reduzca incluso en caso de pánico.Wait(): Bloquea la goroutine actual hasta que el contador interno deWaitGroupllegue a 0.