package config import ( "fmt" "github.com/spf13/viper" "os" "time" ) type Config struct { Redis struct { Addr string `mapstructure:"addr"` Password string `mapstructure:"password"` DB int `mapstructure:"db"` ReadTimeout time.Duration `mapstructure:"read_timeout"` WriteTimeout time.Duration `mapstructure:"write_timeout"` } `mapstructure:"redis"` RabbitMQ struct { URL string `mapstructure:"url"` } `mapstructure:"rabbitmq"` } func NewConfig(p string) *viper.Viper { envConf := os.Getenv("APP_CONF") if envConf == "" { envConf = p } fmt.Println("load conf file:", envConf) return getConfig(envConf) } func getConfig(path string) *viper.Viper { conf := viper.New() conf.SetConfigFile(path) err := conf.ReadInConfig() if err != nil { panic(err) } return conf }