Um WaitGroup é usado para esperar que uma coleção de Goroutines termine a execução. O controle é bloqueado até que todos os Goroutines terminem de ser executados.
var wg sync.WaitGroup
// Incrementa o contador do WaitGroup
// em 1, para que espere a goroutine que
// será chamada a seguir.
wg.Add(1)
go func() {
fmt.Println("Go1")
wg.Done()
}()
// Trava o fluxo da goroutine atual (função main)
// até que o contador do waitGroup zere.
wg.Wait()