go使用协程并发并等待全部协程结束的方法

第一种,基于原生带缓存的channel

package main
 
import "fmt"
 
func main() {
    done := make(chan int, 10)
    for i := 0; i < cap(done); i++ {
        go func(j int) {
            fmt.Println("你好,世界" + fmt.Sprintf("%v", j))
            done <- 1
        }(i)
    }
    //等待N个后台线程完成
    for i := 0; i < cap(done); i++ {
        <-done
    }
}

第二种,通过使用sync.WaitGroup来等待

package main
 
import (
    "sync"
    "fmt"
)
 
func main() {
    var wg sync.WaitGroup
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go func(j int) {
            fmt.Println("你好,世界" + fmt.Sprintf("%v", j))
            wg.Done()
        }(i)
    }
    wg.Wait()
}


版权声明:本文为a1043362562原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/a1043362562/article/details/123827943