code: func (s *Service) Start(config *Config) {
  	if config == nil {
  		panic("no config specified")
  	}
  
  	s.mutex.Lock()
  	defer s.mutex.Unlock()
  
  	// return if already started
  	if atomic.LoadUint32(&s.state) == serviceStarted {
  		return
  	}
  
  	// set state
  	atomic.StoreUint32(&s.state, serviceStarted)
  
  	// save config
  	s.config = config
  
  	// initialize backoff
  	s.backoff = &backoff.Backoff{
  		Min:    s.MinReconnectDelay,
  		Max:    s.MaxReconnectDelay,
  		Factor: 2,
  	}
  
  	// mark future store as protected
  	s.futureStore.Protect(true)
  
  	// create new tomb
  	s.tomb = new(tomb.Tomb)
  
  	// start supervisor
  	s.tomb.Go(s.supervisor)
  }
docs: // Start will start the service with the specified configuration. From now on
  // the service will automatically reconnect on any error until Stop is called.