它可以一直等到全部的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