带有自定义签名的 Golang 错误组

我有一个函数,比如说,func foo(x) error { if x == y ... return err}我想在几个 go 例程中执行并聚合错误(最好使用下面常见示例的错误组),但不确定这是否可能?


   import "golang.org/x/sync/errgroup"


   var g errgroup.Group


   g.Go(func() error {

      resp, err := http.Get(url)

      if err == nil {

         resp.Body.Close()

      }

      return err

   })


湖上湖
浏览 92回答 2
2回答

千万里不及你

按照@mkopriva 的建议回答。var g errgroup.Groupvar x interface{}g.Go(func() error {   return foo(x)})

慕容森

如果您将循环中的参数传递给使封闭函数起作用的 go 例程,这是一个可怕的想法。这是重现上述问题的链接(来自 Homulvas): https: //play.golang.org/p/Jvo_0LI8AxO似乎您想通过 go 例程扫描 url 列表,所以仅供参考,要修复它,您可以在循环中声明一个 func 来初始化 go 例程以获取错误,如下例所示:package mainimport (    "fmt"    "golang.org/x/sync/errgroup")func scan(x string) error {    // if x == y ... return err    fmt.Println(x)    return nil}func main() {    var g errgroup.Group    urls := []string{"a.com", "b.com", "c.com", "d.com"}    for _, url := range urls {        func(scanningUrl string) {            g.Go(func() error {                return scan(scanningUrl)            })        }(url)    }    if err := g.Wait(); err != nil {        //    }}链接: https: //play.golang.org/p/XtfD1AFsdYt
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go