code: func (p *Pool) Go(goroutine func(stop chan bool)) {
  	p.lock.Lock()
  	newRoutine := routine{
  		goroutine: goroutine,
  		stop:      make(chan bool, 1),
  	}
  	p.routines = append(p.routines, newRoutine)
  	p.waitGroup.Add(1)
  	Go(func() {
  		goroutine(newRoutine.stop)
  		p.waitGroup.Done()
  	})
  	p.lock.Unlock()
  }
docs: // Go starts a recoverable goroutine, and can be stopped with stop chan