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"` EnterpriseAgent string `toml:"enterprise_agent"` EnterpriseSecret string `toml:"enterprise_secret"` PaySecret string `toml:"pay_secret"` PayAgent string `toml:"pay_agent"` ApproveAgent string `toml:"approve_agent"` ApproveSecret string `toml:"approve_secret"` } type WxPay struct { PayKeyPem string `toml:"pay_key_pem"` PayCertPem string `toml:"pay_cert_pem"` PayMchId string `toml:"pay_mchid"` PaySerialNumber string `toml:"pay_serial_number"` PayApiKeyV3 string `toml:"pay_api_key_v3"` PayApiKeyV2 string `toml:"pay_api_key_v2"` } type Config struct { Server *Server `toml:"server"` Mysql *Mysql `toml:"mysql"` UnifyMysql *Mysql `toml:"unify_mysql"` Redis *Redis `toml:"redis"` QyWeixin *QyWeixin `toml:"qyweixin"` WxPay *WxPay `toml:"wxpay"` } 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)) }