code: func Init(opts ...Option) error {
  	if running {
  		openlogging.Debug("can not init archaius again, call Clean first")
  		return nil
  	}
  	var err error
  	o := &Options{}
  	for _, opt := range opts {
  		opt(o)
  	}
  
  	// created config factory object
  	factory, err = NewConfigFactory()
  	if err != nil {
  
  		return err
  	}
  	factory.DeInit()
  	factory.Init()
  
  	fs, err := initFileSource(o)
  	if err != nil {
  		return err
  	}
  	if o.ConfigCenterInfo != (ConfigCenterInfo{}) {
  		if err := EnableConfigCenterSource(o.ConfigCenterInfo, o.ConfigClient); err != nil {
  			return err
  		}
  	}
  	err = factory.AddSource(fs)
  	if err != nil {
  		return err
  	}
  
  	// build-in config sources
  	if o.UseMemSource {
  		ms = memoryconfigsource.NewMemoryConfigurationSource()
  		factory.AddSource(ms)
  	}
  	if o.UseCLISource {
  		cmdSource := commandlinesource.NewCommandlineConfigSource()
  		factory.AddSource(cmdSource)
  	}
  	if o.UseENVSource {
  		envSource := envconfigsource.NewEnvConfigurationSource()
  		factory.AddSource(envSource)
  	}
  
  	eventHandler := EventListener{
  		Name:    "EventHandler",
  		Factory: factory,
  	}
  
  	factory.RegisterListener(eventHandler, "a*")
  	openlogging.GetLogger().Info("archaius init success")
  	running = true
  	return nil
  }
docs: // Init create a Archaius config singleton