package configs import ( "fmt" "github.com/go-ini/ini" "log" "time" ) type Server struct { RunMode string HttpPort int ReadTimeout time.Duration WriteTimeout time.Duration } type Database struct { Type string `ini:"type"` UserName string `ini:"user_name"` Password string `ini:"password"` Host string `ini:"host"` Database string `ini:"database"` TablePrefix string `ini:"table_prefix"` } type Redis struct { Host string `ini:"host"` Password string `ini:"password"` MaxIdle int `ini:"max_idle"` MaxActive int `ini:"max_active"` IdleTimeout time.Duration `ini:"idle_timeout"` } type ES struct { Url string `ini:"url"` GoodsIndexName string `ini:"goods_index_name"` } type RabbitMQ struct { Url string `ini:"url"` } type Api struct { Goods string `ini:"goods"` Upload string `ini:"upload"` ApiPort string `ini:"api_port"` Mode string `ini:"mode"` } type Oss struct { UploadKey string `ini:"upload_key"` } var DatabaseSetting = &Database{} var RedisSetting = &Redis{} var RabbitMQSetting = &RabbitMQ{} var ESSetting = &ES{} var ApiSetting = &Api{} var OssSetting = &Oss{} var ( cfg *ini.File ) // Setup initialize the configuration instance func Setup(filePath string) { var err error cfg, err = ini.Load(filePath) if err != nil { panic(fmt.Sprintf("解析配置文件失败: %v", err)) } mapTo("database", DatabaseSetting) mapTo("redis", RedisSetting) mapTo("rabbitmq", RabbitMQSetting) mapTo("es", ESSetting) mapTo("api", ApiSetting) mapTo("oss", OssSetting) RedisSetting.IdleTimeout = RedisSetting.IdleTimeout * time.Second } // mapTo map section func mapTo(section string, v interface{}) { err := cfg.Section(section).MapTo(v) if err != nil { log.Fatalf("Cfg.MapTo %s err: %v", section, err) } }