具有自定义签名的 Golang 错误组超过函数
Golang error group over function with custom signature
我有一个函数,比方说,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
})
@mkopriva 提出的答案。
var g errgroup.Group
var x interface{}
g.Go(func() error {
return foo(x)
})
简单。
正如@Homulvas 在评论中指出的那样,如果您将循环中的参数传递给生成外壳函数的 go 例程,那将是一个可怕的想法。这是重现上述问题的 link(来自 Homulvas):https://play.golang.org/p/Jvo_0LI8AxO
看来你想通过 go routines 扫描 url 列表,所以仅供参考,要修复它,你可以在循环中声明一个 func 来初始化 go routine for error,如下所示:
package main
import (
"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 {
//
}
}
我有一个函数,比方说,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
})
@mkopriva 提出的答案。
var g errgroup.Group
var x interface{}
g.Go(func() error {
return foo(x)
})
简单。
正如@Homulvas 在评论中指出的那样,如果您将循环中的参数传递给生成外壳函数的 go 例程,那将是一个可怕的想法。这是重现上述问题的 link(来自 Homulvas):https://play.golang.org/p/Jvo_0LI8AxO
看来你想通过 go routines 扫描 url 列表,所以仅供参考,要修复它,你可以在循环中声明一个 func 来初始化 go routine for error,如下所示:
package main
import (
"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 {
//
}
}