You add your jobs to a list, then run them in parallel with a configurable amount of concurrency.
Usage
queue := &qu.Queue{}
job := func(payload interface{}) {
// do something with your payload
}
// Add a job to the queue
queue.Add(job, "your payload")
// Run through the queue with 2 threads
queue.Run(2)