当前位置: 首页 > news >正文

网站如何不需要备案百度的宣传视频广告

网站如何不需要备案,百度的宣传视频广告,沈阳网站企业,东莞网站建设优化errgroup 是 Go 语言官方扩展库 x/sync 中的一个包#xff0c;它提供了一种方式来并行运行多个 goroutine#xff0c;并在所有 goroutine 都完成时返回第一个发生的错误#xff08;如果有的话#xff09;。这对于需要并行处理多个任务并等待它们全部完成#xff0c;同时需…errgroup 是 Go 语言官方扩展库 x/sync 中的一个包它提供了一种方式来并行运行多个 goroutine并在所有 goroutine 都完成时返回第一个发生的错误如果有的话。这对于需要并行处理多个任务并等待它们全部完成同时需要处理其中任何一个可能发生的错误的场景非常有用。 errgroup 是 Go 语言中用于管理多个 goroutine 的同步和错误处理的库。使用 errgroup 可以简化并发代码的编写使得错误处理更加简洁和一致。 注意:goroutine任务需要有取消功能才能立即终止其它任务返回。 errgroup可以等待所有任务完成再返回也可以等到第一个错误出现时终止其它任务取决于业务逻辑。 它的主要作用包括 同步: errgroup.Group 提供了一个 Wait 方法这个方法会阻塞调用者直到组内的所有goroutine都完成执行。错误传播: errgroup 能确保第一个发生的错误会被立即传播给所有其他goroutine这样可以避免在多个并发任务中检查每个任务的状态简化错误处理逻辑。取消上下文: errgroup 结合 context.Context 使用可以在外部请求取消时通知所有goroutine停止执行。返回第一个错误原因。限制并发: 通过 SetLimit 方法errgroup 可以限制同时运行的goroutine数量。配合done()方法。cancel()触发done()。 案例1 fetch其中一个报错了其它的goroutine还在运行。errgroup返回的是最后一个错误。 package mainimport (errorsfmtgolang.org/x/sync/errgroupmath/randtime )func fetch(url string) (string, error) {randomNumber : rand.Intn(10) 5fmt.Println(randomNumber)time.Sleep(time.Duration(randomNumber) * time.Second)fmt.Println(fetch)return url, errors.New(error happens) }func main() {urls : []string{http://example.com,http://example.org,http://example.net,}rand.Seed(time.Now().UnixNano())var eg errgroup.Groupfor _, url : range urls {eg.Go(func() error {body, err : fetch(url)if err ! nil {return err}fmt.Printf(Fetched %s: %s\n, url, body)return nil})}if err : eg.Wait(); err ! nil {fmt.Printf(Failed to fetch one or more URLs: %v\n, err)} }输出: 14 7 9 fetch fetch fetch Failed to fetch one or more URLs: error happens这个并不是我们想要的结果我们期望其中一个goroutine报错后其它的任务终止。 案例2 当碰到错误会立即停止所有goroutine。 package mainimport (contexterrorsfmtgolang.org/x/sync/errgroupstringstime )func main() {queryUrls : map[string]string{url1: http://localhost/url1,url2: http://localhost/url2,url3: http://localhost/url3,}var results []stringctx, cancel : context.WithCancel(context.Background())eg, errCtx : errgroup.WithContext(ctx)for _, url : range queryUrls {url : urleg.Go(func() error {result, err : query(errCtx, url)if err ! nil {//其实这里不用手动取消看完源码就知道为啥了cancel()return err}results append(results, fmt.Sprintf(url:%s -- ret: %v, url, result))return nil})}err : eg.Wait()if err ! nil {fmt.Println(eg.Wait error:, err)return}for k, v : range results {fmt.Printf(%v --- %v\n, k, v)} }func query(errCtx context.Context, url string) (ret string, err error) {fmt.Printf(请求 %s 开始....\n, url)// 假设这里是发送请求获取数据if strings.Contains(url, url2) {// 假设请求 url2 时出现错误time.Sleep(time.Second * 2)return , errors.New(请求出错)} else if strings.Contains(url, url3) {// 假设 请求 url3 需要1秒select {case -errCtx.Done():ret, err , errors.New(请求3被取消)fmt.Println(请求3被取消)returncase -time.After(time.Second * 3):fmt.Printf(请求 %s 结束....\n, url)return success3, nil}} else {select {case -errCtx.Done():ret, err , errors.New(请求1被取消)fmt.Println(请求1被取消)returncase -time.After(time.Second):fmt.Printf(请求 %s 结束....\n, url)return success1, nil}}}输出: 请求 http://localhost/url2 开始.... 请求 http://localhost/url3 开始.... 请求 http://localhost/url1 开始.... 请求 http://localhost/url1 结束.... 请求3被取消 eg.Wait error: 请求出错eg.Wait() 会阻塞直到所有的 goroutine 都完成执行或者其中一个 goroutine 返回了错误。如果有错误发生eg.Wait() 会返回第一个遇到的错误。 通过使用 errgroup我们可以更容易地管理多个 goroutine并在其中一个 goroutine 发生错误时取消其他 goroutine。
http://www.w-s-a.com/news/942075/

相关文章:

  • 如何用易语言做网站采购系统有哪些
  • 建一个网站容易吗浙江省城乡建设厅官网
  • 奇点网站建设黄骅贴吧百度贴吧
  • 站长爱it如何分析网站设计
  • 服装公司网站定位seo网站关键词
  • 电商网站开发流程文档南京 seo 价格
  • 网站建设任务分解张家港网站制作服务
  • 化州+网站建设网络营销怎么做推广
  • 贵阳网站设计方案阿里云 wordpress 数据库
  • 如何做购物返佣金网站高校 网站建设实施方案
  • 网站如何连接微信支付网页制作与网站开发
  • 地名网站建设方案营销型网站策划书
  • 网站优化排名查询网站图片怎么做的高级
  • 官方网站建设调研报告小程序短链接生成
  • 专做耐克阿迪鞋网站免费微信网站模板下载
  • 视频在线制作网站wordpress怎么调用友情链接
  • 做微商什么是官方网站温州阀门外贸网站建设
  • 申请主机网站网站建设平台合同模板
  • 如何做ps4的游戏视频网站海口网红图书馆
  • 福建住房和城乡建设局网站做私人小网站赚钱吗
  • 物流的网站模板wordpress网站 800cdn
  • 建站公司合肥做精品课程网站需要啥素材
  • 成都三合一网站建设网站建设教程自学网
  • 门户网站跳出率wordpress火车头采集教程
  • 天津做网站的网络公司wordpress免费的模板
  • 有哪些关于校园内网站建设的法律如何申请免费网站空间
  • 玉溪市网站建设龙口网页定制
  • 网站开发都用什么软件上海景观设计公司10强
  • 网站建设氵金手指下拉十二深圳网站建设售后服务
  • 上海网站设计价青海企业网站制作