Go 语言任务编排 WaitGroup
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
urls := []string{"https://www.google.com", "https://www.facebook.com", "https://www.amazon.com"}
for _, url := range urls {
// 将等待组的计数增加
wg.Add(1)
go func(u string) {
defer wg.Done() // 当函数退出时,将等待组的计数减少
// 模拟网络请求
fmt.Println("Fetching", u)
}(url)
}
// 等待所有并发任务完成
wg.Wait()
}
这段代码使用了sync.WaitGroup
来协调并发任务的执行。它首先定义了一个等待组,然后对于给定的URL数组中的每个URL,它都会启动一个并发的goroutine来处理。在每个goroutine开始之前,它通过wg.Add(1)
来增加等待组的计数。goroutine结束时,通过defer wg.Done()
确保计数减少。最后,使用wg.Wait()
等待所有并发任务完成。
评论已关闭