go的err.Group()
https://github.com/go-kratos/kratos/blob/v1.0.x/pkg/sync/errgroup/doc.go
1目录
- sync.errgroup的由来
- sync.errgroup 的示例
- sync.errgroup 源码阅读
- sync.errgroup延展kratos/pkg/sync/errgroup
- sync.errgroup开源项目使用情况
6.Q&A
WaitGroup处理并发任务
创建goroutine ,开始任务调用wg.Add(1);
任务结束,调用wg.Done();
等待所有任务完成,调用wg.Wait()
sync.errgroup的由来:
errgroup是为了处理一组任务的子任务的goroutine 组,它提供同步、错误传递和上下文取消。
你有一组任务是并发的工作,当遇到某种错误或者你不想再输出了,你可能想取消整个goroutine,那么errgroup.errgroup就是为你而设计的。、
点击查看代码
package main
import(
"fmt"
"time"
"golang.org/x/sync/errgroup"
)
func hello(i int) {
fmt.Println( "hello",i)
}
func main(){
var g errgroup.Group
var urls = []string{
"http://www.baidu.com/",
"http://www.baidu.com/",
"http://www.1234567.com", //假的
}
for _, url := range urls {
// Launch a goroutine to fetch the URL.
url := url
g.Go(func() error {
//Fetch the URL.
resp, err := http.Get(url)
if err == nil {//这里记得关掉
resp.Body.Close()
}
// ..这里可以做一些resp 的处理
return err
})
}
// Wait for all HTTP fetches to complete.
err := g.Wait();
if err != nil {
fmt.Printf("err: %v", err)
return
}
fmt.Println("Successfully fetched all URLs.")
}
写入自己的博客中才能记得长久