2 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
您需要傳遞一個(gè)指向 WaitGroup 的指針,而不是 WaitGroup 對象。當(dāng)您傳遞實(shí)際的 WaitGroup 時(shí),Go 會(huì)復(fù)制該值,并調(diào)用Done()該副本。結(jié)果是原始的WaitGroup 將有10 個(gè)Add 并且沒有Done,并且WaitGroup 的每個(gè)副本將有一個(gè)Done() 并且當(dāng)WaitGroup 傳遞給函數(shù)時(shí)有多少Add。
而是傳遞一個(gè)指針,每個(gè)函數(shù)都將引用相同的 WaitGroup。
import "sync"
func doWork(wg *sync.WaitGroup) error {
defer wg.Done()
// Do some heavy lifting... request URL's or similar
return nil
}
func main() {
wg := &sync.WaitGroup{}
for i := 0; i < 10; i++ {
wg.Add(1)
go doWork(wg)
}
}
- 2 回答
- 0 關(guān)注
- 266 瀏覽
添加回答
舉報(bào)