go并发小工具errgroup

Posted 柳清风09

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go并发小工具errgroup相关的知识,希望对你有一定的参考价值。

先看demo

package main

import (
	"fmt"
	"golang.org/x/sync/errgroup"
	"net/http"
)

func main() 
	var g errgroup.Group
	var urls = []string
		"http://www.golang.org/",
		"http://www.xxxzzzzzzxxxx.com",
		"http://www.google.com/",
	
	for i := range urls 
		url := urls[i]
		g.Go(func() error 
			resp, err := http.Get(url)
			if err == nil 
				resp.Body.Close()
			
			fmt.Println(url)
			return err
		)
	
	if err := g.Wait(); err != nil 
		fmt.Printf("error %v", err)
		return
	
	fmt.Println("Successfully fetched all URLs.")


这里有个小问题大家需要注意,g.Wait 返回的只有一个错误,也就是指返回第一个错误,如果请求中有多个报错将会被忽略。
所以如果你需要获取每个报错,我还是建议你使用 waitgroup的方式。

以上是关于go并发小工具errgroup的主要内容,如果未能解决你的问题,请参考以下文章

使用Go的sync.ErrGroup类快速并行搜索文件

浅谈errgroup的使用以及源码分析

只会使用 WaitGroup?你应该学习下 ErrGroup!

go:远程包安装问题

Go使用Go语言打造定时提醒小工具,从基础到优化全方位探索

go实现的压测工具