var wg sync.WaitGroup
wg.Add(len(work))
sem := make(chan struct{}, 10)
wgDone := make(chan bool)
for i < len(work)-1 {
go func() {
defer wg.Done()
sem <- struct{}{}
defer func() {
<-sem
}()
worker(work[i])
}()
i = i + 1
}
go func() {
wg.Wait()
close(wgDone)
}()
Run Code Online (Sandbox Code Playgroud)
我一次只需要10 个新的 goroutine来执行这项工作。这是我当前的解决方案,它阻止 goroutine 继续运行,因此一次只有 10 个。我怎样才能改变这个,这样它就不会创建大量被阻塞等待工作的 goroutine,而是只创建 10 个完成所有工作的 goroutine?