code: func Do(threshold time.Duration, sf SlowFunc, cb CallbackFunc) error {
  	// Call the slow function
  	errCh := make(chan error, 1)
  	go func() {
  		errCh <- sf()
  	}()
  
  	// Wait for it to complete or the threshold to pass
  	select {
  	case err := <-errCh:
  		return err
  	case <-time.After(threshold):
  		// Threshold reached, call the callback
  		cb()
  	}
  
  	// Wait an indefinite amount of time for it to finally complete
  	return <-errCh
  }
docs: // Do calls sf. If threshold time has passed, cb is called. Note that this
  // call will be made concurrently to sf still running.