func main() {
	ch := make(chan struct{}, 10)
	var wg sync.WaitGroup
	for i := 0; i < 1000; i++ {
		ch <- struct{}{}
		wg.Add(1)
		go func(i int) {
			defer func() {
				<-ch
				wg.Done()
			}()
			fmt.Println(i)
		}(i)
	}
	wg.Wait()
}
https://play.golang.org/p/Cry94fFpeFH
Recommended Posts