2 回答

TA貢獻(xiàn)1784條經(jīng)驗 獲得超9個贊
按照@mkopriva 的建議回答。
var g errgroup.Group
var x interface{}
g.Go(func() error {
return foo(x)
})

TA貢獻(xiàn)1853條經(jīng)驗 獲得超18個贊
如果您將循環(huán)中的參數(shù)傳遞給使封閉函數(shù)起作用的 go 例程,這是一個可怕的想法。這是重現(xiàn)上述問題的鏈接(來自 Homulvas): https: //play.golang.org/p/Jvo_0LI8AxO
似乎您想通過 go 例程掃描 url 列表,所以僅供參考,要修復(fù)它,您可以在循環(huán)中聲明一個 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 關(guān)注
- 106 瀏覽
添加回答
舉報