2 回答

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

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