WaitGroup — wait for goroutines to finish. Channel — communicate between goroutines.
sync.WaitGroup:
1var wg sync.WaitGroup23for i := 0; i < 5; i++ {4 wg.Add(1)5 go func(id int) {6 defer wg.Done()7 fmt.Println("Worker", id)8 }(i)9}1011wg.Wait() // Wait for all12fmt.Println("All done")
Channel:
1done := make(chan bool)23go func() {4 fmt.Println("Working...")5 done <- true // Signal done6}()78<-done // Wait for signal9fmt.Println("All done")
Key differences: