package main import ( "fmt" "sync" ) const maxConcurrency = 5 // Max number of concurrency func doSomething(a int) { fmt.Println("Doing something...",a) return } func main() { var ch = make(chan int, 50) // This number 50 can be anything as long as it's larger than maxConcurrency var wg sync.WaitGroup // This starts max number of goroutines that wait for something to do wg.Add(maxConcurrency) for i:=0; i