El paquete sync dispone de un struct llamado WaitGroup con una serie de métodos.
Este struct y sus métodos nos permiten llevar un conteo de las goroutines en ejecución.
Dispone de los siguientes métodos:
Mostrar el número "0" mil veces y el número "1" mil veces. Utilizar la programación concurrente.
Administrar la finalización del programa mediante un tipo WaitGroup.
package main import ( "fmt" "sync" ) var wg sync.WaitGroup func mostrar0() { for f := 1; f <= 1000; f++ { fmt.Print("0-") } wg.Done() } func mostrar1() { for f := 1; f <= 1000; f++ { fmt.Print("1-") } wg.Done() } func main() { wg.Add(2) go mostrar0() go mostrar1() wg.Wait() }
Para definir una variable de tipo WaitGroup debemos importar el paquete sync donde esta define:
import ( "fmt" "sync" )
Definimos una variable global del tipo WaitGroup:
var wg sync.WaitGroup
Como sabemos este programa lanza dos Goroutine por lo que llamamos al método Add pasando el valor 2:
func main() { wg.Add(2)
Seguidamente lanzamos las dos Goroutines:
go mostrar0() go mostrar1()
Llamamos al método Wait del objeto wg del tipo WaitGroup que se detiene en su interior hasta que las dos Goroutines finalizan:
wg.Wait() }