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() }

程序运行后,控制台输出如下:

10_goroutine等待结束.png

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() }

程序运行后,控制台输出如下:

11_goroutine等待结束.png

sync.WaitGroupwg
wg.Done()
wg.Addwg.Wait
sync.WaitGroup

Go语言等待协程结束教程总结

sync.WaitGroupwg.Addwg.Donewg.Wait