package threading type WorkerGroup struct { job func() workers int } func NewWorkerGroup(job func(), works int) *WorkerGroup { return &WorkerGroup{ job: job, workers: works, } } func (wg WorkerGroup) Start() { group := NewRoutineGroup() for i := 0; i < wg.workers; i++ { group.RunSafe(wg.job) } group.Wait() }