code: func (sit *SyncIntervalTimer) Start() {
  	if sit.intervalTimer == nil {
  	exitA:
  		for {
  			select {
  			case sit.sync <- struct{}{}:
  				<-sit.sync
  			case <-sit.stop:
  				break exitA
  			}
  		}
  	} else {
  	exitB:
  		for {
  			select {
  			case <-sit.intervalTimer.C:
  				if err := sit.f(); err != nil {
  					if sit.onError != nil {
  						sit.onError(err)
  					}
  				}
  				select {
  				case <-sit.stop:
  					break exitB
  				default:
  				}
  			case sit.sync <- struct{}{}:
  				<-sit.sync
  			case <-sit.stop:
  				break exitB
  			}
  		}
  	}
  	close(sit.sync)
  }
docs: // Start starts the timer loop. This function blocks the caller until
  // the timer is stopped.