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
}