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"` EnableDoc bool `toml:"enable_doc"` } type Redis struct { Addr string `toml:"addr"` Db int `toml:"db"` Password string `toml:"password"` } type Weixin struct { QiyeAppid string `toml:"qiye_appid"` Qiyesecret string `toml:"qiye_secret"` QiyeAgent string `toml:"qiye_agent"` } type Film struct { DadiToken string `toml:"dadi_token"` HahaToken string `toml:"haha_token"` } type Config struct { Server *Server `toml:"server"` Mysql *Mysql `toml:"mysql"` Redis *Redis `toml:"redis"` Weixin *Weixin `toml:"weixin"` Film *Film `toml:"film"` } 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 = "dev" } 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)) }