您需要将指针传递给WaitGroup,而不是WaitGroup对象。当您传递实际的WaitGroup时,Go会生成该值的副本,然后调用
Done()该副本。结果是原始的WaitGroup将具有10个Add,而没有Done,并且WaitGroup的每个副本将具有一个Done(),但是将WaitGroup传递给函数时,其中有许多Add。
而是传递一个指针,每个函数将引用相同的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) }}


