WaitGroup在go语言中,用于线程同步,单从字面意思理解,wait等待的意思,group组、团队的意思,WaitGroup就是指等待一组,等待一个系列执行完成后才会继续向下执行。
package main import ( "fmt" "sync" "time" ) func main() { wg := sync.WaitGroup{} for i := 0; i < 10; i++ { wg.Add(1) go calc(&wg, i) } wg.Wait() //注释掉,不等待就直接走下去了 fmt.Println("all goroutine finish") } func calc(w *sync.WaitGroup, i int) { fmt.Println("calc:", i) time.Sleep(time.Second) w.Done() //注释掉,就抱死锁的错误 }