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.")
}
写入自己的博客中才能记得长久
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!