1、简单使用(这个执行完成,如果进程执行比较久,这里不会等待它们结束)
package mainimport "time"func main() {go func() {println("Hello, World!")}()time.Sleep(1 * time.Second)
}
2、wg.Add(数量)使用,这个会等待,直到全部完成
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()
}
传值localI := i,不能直接使用i,会重复,因为你在下次使用可能i已改变
var wg sync.WaitGroup
numGoroutines := 100
wg.Add(numGoroutines) //100个
for i := 0; i < numGoroutines; i++ {localI := igo func() {fmt.Println("Value:", localI)fmt.Println("大得")wg.Done() //减1,直到全部减完,结束}()
}
wg.Wait()
fmt.Println("执行完了")