Go语言等待协程结束教程
sync.WaitGroupwg.Addwg.Donewg.Wait
Go语言等待协程结束
语法
wg sync.WaitGroup // 设置需要等待的协程数 wg.Add(num) // 一个协程处理结束 wg.Done() // 等到所有的协程结束 wg.Wait()
说明
wg.Addwg.Donewg.Wait
案例
等待goroutine结束
使用 sync.WaitGroup 等待协程结束
package main import ( "fmt" "sync" "time" ) var( wg sync.WaitGroup ) func printInfo(s string){ defer wg.Done() for i := 0; i < 2; i++{ fmt.Println("Info =", s, "i =", i) // 延时1秒 time.Sleep(time.Second) } } func main() { fmt.Println("嗨客网(www.haicoder.net)") wg.Add(1) // 使用 sync.WaitGroup 等待协程结束 go printInfo("HaiCoder Golang") wg.Wait() }
程序运行后,控制台输出如下:
sync.WaitGroupwg
wg.Done()
wg.Addwg.Wait
sync.WaitGroup
等待多个goroutine结束
使用 sync.WaitGroup 等待多个协程结束
package main import ( "fmt" "sync" ) var( wg sync.WaitGroup ) func sum(num int)int{ defer wg.Done() result := 0 for i := 1; i <= num; i++{ result += i } fmt.Println("Sum =", result) return result } func mul(num int)int{ defer wg.Done() result := 1 for i := 1; i <= num; i++{ result *= i } fmt.Println("Mul =", result) return result } func main() { fmt.Println("嗨客网(www.haicoder.net)") wg.Add(2) // 使用 sync.WaitGroup 等待多个协程结束 go sum(100) go mul(10) wg.Wait() }
程序运行后,控制台输出如下:
sync.WaitGroupwg
wg.Done()
wg.Addwg.Wait
sync.WaitGroup
Go语言等待协程结束教程总结
sync.WaitGroupwg.Addwg.Donewg.Wait