Sobes.tech
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 usando defer).
  • 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")
}