2 回答
TA贡献1784条经验 获得超9个赞
按照@mkopriva 的建议回答。
var g errgroup.Group
var x interface{}
g.Go(func() error {
return foo(x)
})
TA贡献1853条经验 获得超18个赞
如果您将循环中的参数传递给使封闭函数起作用的 go 例程,这是一个可怕的想法。这是重现上述问题的链接(来自 Homulvas): https: //play.golang.org/p/Jvo_0LI8AxO
似乎您想通过 go 例程扫描 url 列表,所以仅供参考,要修复它,您可以在循环中声明一个 func 来初始化 go 例程以获取错误,如下例所示:
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 {
//
}
}
链接: https: //play.golang.org/p/XtfD1AFsdYt
- 2 回答
- 0 关注
- 91 浏览
添加回答
举报