package config import ( "github.com/spf13/viper" ) type ConfigurationFile struct { vp *viper.Viper } var ( sections = make(map[string]interface{}) ) func NewConfigurationFile() (*ConfigurationFile, error) { vp := viper.New() vp.SetConfigType("yaml") vp.SetConfigName("settings") vp.AddConfigPath(".") err := vp.ReadInConfig() if err != nil { return nil, err } s := &ConfigurationFile{vp} vp.SetConfigName("settings.local") err = vp.MergeInConfig() if err != nil { return s, nil } return s, nil } func (s *ConfigurationFile) ReadSection(k string, v interface{}) error { err := s.vp.UnmarshalKey(k, v) if err != nil { return err } if _, ok := sections[k]; !ok { sections[k] = v } return nil } func (s *ConfigurationFile) ReloadAllSection() error { for k, v := range sections { err := s.ReadSection(k, v) if err != nil { return err } } return nil }