golang等待goroutine完成任务
WaitGroup 用来等待单个或多个goroutine执行结束。在主逻辑中使用 WaitGroup的Add方法设置需要等待的goroutine的数量。在每个goroutine执行的函数中,需要调用WaitGroup的Done 方法。最后在主逻辑中调用WaitGroup的Wait方法进行阻塞等待,直到所有goroutine执行完成。使用方法可以总结为下面几点:
1️⃣创建一个 WaitGroup实例
2️⃣调用wg.Add(n),其中n是等待的goroutine的数量
3️⃣在每个goroutine运行的函数中执行defer wg.Done()
4️⃣调用 wg.Wait()阻塞主逻辑
package main
import (
"fmt"
"sync"
"net/http"
)
func main() {
var urls = []string{
"https://www.baidu.com/",
"https://www.google.com/",
}
var wg sync.WaitGroup
for _, url := range urls {
wg.Add(1)
go fetch(url, &wg)
}
wg.Wait()
}
func fetch(url string, wg *sync.WaitGroup) (string, error) {
defer wg.Done()
resp, err := http.Get(url)
if err != nil {
fmt.Println(err)
return "", err
}
fmt.Println(resp.Status)
return resp.Status, nil
}