package config import ( "github.com/mitchellh/mapstructure" log "github.com/sirupsen/logrus" "github.com/smbrave/goutil" "github.com/spf13/viper" "os" "strings" ) var ( config *Config configEnv string BuildTime string CommitId string ) type Mysql struct { Host string `toml:"host"` Port int `toml:"port"` User string `toml:"user"` Pass string `toml:"pass"` Db string `toml:"db"` } type Server struct { Address string `toml:"address"` LogLevel int `toml:"log_level"` } type Redis struct { Addr string `toml:"addr"` Db int `toml:"db"` Password string `toml:"password"` } type QyWeixin struct { Corpid string `toml:"corpid"` CheckinAgent string `toml:"checkin_agent"` CheckinSecret string `toml:"checkin_secret"` CheckinGroup string `toml:"checkin_group"` CheckinPayThresold float64 `toml:"checkin_pay_thresold"` EnterpriseAgent string `toml:"enterprise_agent"` EnterpriseSecret string `toml:"enterprise_secret"` HrAgent string `toml:"hr_agent"` HrSecret string `toml:"hr_secret"` } type Config struct { Server *Server `toml:"server"` Mysql *Mysql `toml:"mysql"` Redis *Redis `toml:"redis"` QyWeixin *QyWeixin `toml:"qyweixin"` } func GetEnv() string { return configEnv } func IsProdEnv() bool { return configEnv == "prod" } func IsDevEnv() bool { return configEnv == "dev" } func IsTestEnv() bool { return configEnv == "test" } func GetConfig() *Config { return config } func LoadServerConfig() { configEnv = os.Getenv("CONFIG_ENV") if configEnv == "" { configEnv = "prod" } var envConfig Config viper.SetConfigFile("conf/server.conf." + configEnv) viper.SetConfigType("toml") viper.AutomaticEnv() viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) viper.SetEnvPrefix("conf") if err := viper.ReadInConfig(); err != nil { panic(err) } if err := viper.Unmarshal(&envConfig, func(decoderConfig *mapstructure.DecoderConfig) { decoderConfig.TagName = "toml" }); err != nil { panic(err) } config = &envConfig log.Infof("load real config[%s] ", goutil.EncodeJSONIndent(config)) }