Go的sync.WaitGroup(二)
WaitGroup add与done只是用来统计数量的 done减为0的时候就告诉wait结束 wait只是用来堵塞主函数的 当协程数为0时候结束 有了它我们不用写time.Sleep或者<-channelname了 package main import ( "fmt" "sync" ) var waitgroup sync.WaitGroup func Afunction(shownum int) { fmt.Println(shownum) waitgroup.Done() //任务完成,将任务队列中的任务数量-1,其实.Done就是.Add(-1) } func main() { for i := 0; i < 6; i++ { waitgroup.Add(1) //每创建一个goroutine,就把任务队列中任务的数量+1 go Afunction(i) } waitgroup.Wait() //.Wait()这里会发生阻塞,直到队列中所有的任务结束就会解除阻塞 } // 5 // 3 // 2 // 0 // 1 // 4 来源: https://blog.csdn.net/fujian9544/article/details/100538199