package global import "github.com/spf13/viper" type Settings struct { vp *viper.Viper } var sections = make(map[string]interface{}) // NewSetting 读取配置 func NewSetting() (*Settings, error) { vp := viper.New() vp.SetConfigName("config") vp.AddConfigPath("configs") vp.SetConfigType("yaml") err := vp.ReadInConfig() if err != nil { return nil, err } s := &Settings{vp} return s, nil } // ReadSection 读取指定的一段 func (s *Settings) 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 } // ReloadAllSection 重新加载 func (s *Settings) ReloadAllSection() error { for k, v := range sections { err := s.ReadSection(k, v) if err != nil { return err } } return nil }