code: func (hc *Check) Run(start <-chan time.Time) {
  
  	// Wait for initial configuration.
  	select {
  	case config := <-hc.update:
  		hc.Config = config
  	case <-hc.quit:
  		return
  	}
  
  	// Wait for a tick to avoid a thundering herd at startup and to
  	// stagger healthchecks that have the same interval.
  	if start != nil {
  		<-start
  	}
  	log.Infof("Starting healthchecker for %d (%s)", hc.Id, hc)
  
  	ticker := time.NewTicker(hc.Interval)
  	hc.healthcheck()
  	for {
  		select {
  		case <-hc.quit:
  			ticker.Stop()
  			log.Infof("Stopping healthchecker for %d (%s)", hc.Id, hc)
  			return
  
  		case config := <-hc.update:
  			if hc.Interval != config.Interval {
  				ticker.Stop()
  				if start != nil {
  					<-start
  				}
  				ticker = time.NewTicker(config.Interval)
  			}
  			hc.Config = config
  
  		case <-ticker.C:
  			hc.healthcheck()
  		}
  	}
  }
docs: // Run invokes a healthcheck. It waits for the initial configuration to be
  // provided via the configuration channel, after which the configured
  // healthchecker is invoked at the given interval. If a new configuration
  // is provided the healthchecker is updated and checks are scheduled at the
  // new interval. Notifications are generated and sent via the notification
  // channel whenever a state transition occurs. Run will terminate once a
  // value is received on the quit channel.