它可以一直等到全部的goroutine执行完成,而且阻塞主线程的执行,直到全部的goroutine执行完成。线程
WaitGroup总共有三个方法:Add(delta int),Done(),Wait()。简单的说一下这三个方法的做用。code
Add:添加或者减小等待goroutine的数量it
Done:至关于Add(-1)import
Wait:执行阻塞,直到全部的WaitGroup数量变成0方法
package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup for i := 0; i < 5; i = i + 1 { wg.Add(1) go func(n int) { // defer wg.Done() defer wg.Add(-1) EchoNumber(n) }(i) } wg.Wait() } func EchoNumber(i int) { time.Sleep(3e9) fmt.Println(i) }
输出im
0 1 2 3 4