electricity_bill_calc_service/config/configuration.go
2022-08-09 15:02:34 +08:00

55 lines
896 B
Go

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
}