package config import ( "fmt" "gat1400Exchange/pkg/logger" "github.com/fsnotify/fsnotify" "github.com/spf13/viper" ) type serve struct { ID string `mapstructure:"id"` Mode string `mapstructure:"mode"` Host string `mapstructure:"host"` Port string `mapstructure:"port"` Password string `mapstructure:"password"` } type logConfig struct { LogWay string `mapstructure:"log-way"` // 日志输出 Path string `mapstructure:"path"` // 日志存储路径 Level string `mapstructure:"level"` // 日志等级 MaxAge int64 `mapstructure:"max-age"` // 保留压缩包天数 } type forward struct { SyncServer string `mapstructure:"sync-server"` ReportServer string `mapstructure:"report-server"` ReportInterval int `mapstructure:"report-interval"` } type rateLimitConfig struct { FillInterval int64 `mapstructure:"fill-interval" json:"fillInterval"` Capacity int64 `mapstructure:"capacity" json:"capacity"` } var ServeConf = &serve{} var LogConf = &logConfig{} var ForwardConf = &forward{} var RateLimitConf = &rateLimitConfig{} // Init is an exported method that takes the environment starts the viper // (external lib) and returns the configuration struct. func init() { var err error v := viper.New() v.SetConfigType("yaml") v.SetConfigName("gat1400") v.AddConfigPath("./config/") err = v.ReadInConfig() if err != nil { fmt.Println("error on parsing configuration file", err) } read2Conf(v) v.WatchConfig() v.OnConfigChange(func(e fsnotify.Event) { read2Conf(v) }) } func read2Conf(v *viper.Viper) { v.UnmarshalKey("serve", ServeConf) v.UnmarshalKey("log", LogConf) v.UnmarshalKey("forward", ForwardConf) v.UnmarshalKey("rate-limit", RateLimitConf) if LogConf.Level == "" { LogConf.Level = "info" } logger.SetLogLevel(LogConf.Level) }