1 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超6個贊
該程序在調(diào)用wg之間有一場競賽。添加并調(diào)用 wg。等等。這些調(diào)用可以按任何順序發(fā)生。在調(diào)用 之前,調(diào)用 時不等待任何 goroutines。wg.Waitwg.Waitwg.Add
通過在啟動調(diào)用 的 goroutine 之前將調(diào)用移動到 進(jìn)行修復(fù)。此更改可確保在調(diào)用 之前進(jìn)行調(diào)用。wg.Addwg.Waitwg.Addwg.Wait
for i := 0; i < 5; i++ {
x := i
wg.Add(1)
go func() {
defer wg.Done()
fmt.Println("Value: ", x)
ch <- x
}()
}
go func() {
defer close(ch)
defer close(done)
wg.Wait()
done <- struct{}{}
}()
該類型具有在競賽檢測器下運(yùn)行時檢查此錯誤的代碼(建模讀取,建模寫入)。WaitGroup
通過在關(guān)閉時中斷主 goroutine 中的循環(huán)來簡化代碼。不需要該通道。chdone
ch := make(chan int)
wg := sync.WaitGroup{}
for i := 0; i < 5; i++ {
x := i
wg.Add(1)
go func() {
defer wg.Done()
fmt.Println("Value: ", x)
ch <- x
}()
}
go func() {
wg.Wait()
close(ch)
}()
for i := range ch {
fmt.Println("Value: ", i)
}
- 1 回答
- 0 關(guān)注
- 92 瀏覽
添加回答
舉報(bào)