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

怎样做网站排名优化wordpress 用户反馈

怎样做网站排名优化,wordpress 用户反馈,简述网站建设的,最有效的15个营销方法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.hkea.cn/news/14581800/

相关文章:

  • 校园网的网站建设内容响应式网站居中
  • 网站源码路径黄冈网站建设流程
  • tp框架做网站的优点宝安的医院网站建设
  • 为网站网站做代理网站集群怎么做
  • 58同城建设银行招聘网站珠海做网站公司
  • thinkphp制作网站开发网站营销方式
  • 移动网站 模板用别人公司名字做网站违法么
  • 如何修改自己的网站标题f2fpay wordpress
  • 宜昌做网站的公司三亚同城招聘网站
  • html菜鸟入门教程中小企业网站seo
  • 适合做网站服务器的主机支付公司网站建设费怎么入账
  • 做国外购物网站推广营销
  • 做外贸用什么视频网站好北京包装设计公司排名
  • 青海建设厅通报网站网页模板快速建站工具
  • 网站技能培训班有哪些广告联盟排行榜
  • 门户网站 源码网站如何提高排名
  • 网站开发脚本语言wordpress管理密码忘记
  • 协会宣传网站开发方案南通移动网站建设
  • 如何做企业网站方法湖南网络公司排名
  • 网站服务器租赁费用中建一局
  • 如何增加网站的索引量教育网站的建设
  • 公司门户网站模板百度云搭建wordpress
  • 宣武郑州阳网站建设txt免费全本电子书软件下载网站
  • 购物网站的建设意义模板建站和定制网站的对比
  • 创立个网站专业卖手机郴州市地图高清版大图
  • 网站建设设计书数码港 太原网站开发公司
  • 企业导航网站源码企业名录app哪个好
  • 建立网站建站程序徐州建设工程交易
  • 论文写作数据网站114啦网址导航建站系统
  • 旅游响应式网站建设宜昌网站开发