package common import ( "fmt" ) import ( "github.com/spf13/viper" ) //配置文件 var ( ApplicationConfig = new(application) BasicConfig = new(basic) LoggerConfig = new(logger) RobotConfig = new(robot) PostgresConfig = new(postgres) MetadataConfig = new(metadata) ) // 应用配置 type application struct { Host string Port int Mode string } func (p *application) Addr() string { return fmt.Sprintf("%s:%d", p.Host, p.Port) } type basic struct { Jwt string } // 日志配置 type logger struct { LogDir string // 日志文件夹路径 LogLevel string // 日志打印等级 MaxSize int //在进行切割之前,日志文件的最大大小(以MB为单位) MaxAge int //保留旧文件的最大天数 Compress bool //是否压缩/归档旧文件 Stdout bool } type robot struct { Info string Dev string Prod string } // 数据库配置 type postgres struct { Ip string Port int Username string Password string Name string } // metadata配置 type metadata struct { Languages []Lang } func (p *metadata) setup() { if !ValidLanguages(p.Languages) { panic(fmt.Sprintf("invalid languages, optional values are: %v", AllLanguages())) } } func (p *metadata) GetLanguages() []Lang { if len(p.Languages) == 0 { return AllLanguages() } return p.Languages } func InitApplication() *application { return &application{ Host: viper.GetString("host"), Port: viper.GetInt("port"), Mode: viper.GetString("mode"), } } func InitBasic(cfg *viper.Viper) *basic { var basic basic err := cfg.Unmarshal(&basic) if err != nil { panic("InitBasic err") } return &basic } func InitLog(cfg *viper.Viper) *logger { var logger logger err := cfg.Unmarshal(&logger) if err != nil { panic("InitLog err") } return &logger } func InitRobot(cfg *viper.Viper) *robot { var robot robot err := cfg.Unmarshal(&robot) if err != nil { panic("InitRobot error") } return &robot } func InitPostgres(cfg *viper.Viper) *postgres { var postgres postgres err := cfg.Unmarshal(&postgres) if err != nil { panic("InitPostgres err") } return &postgres } func InitMetadata(cfg *viper.Viper) *metadata { var metadata metadata err := cfg.Unmarshal(&metadata) if err != nil { panic("InitMetadata err") } metadata.setup() return &metadata } // 载入配置文件 func SetupConfig(path string) { viper.SetConfigFile(path) if err := viper.ReadInConfig(); err != nil { panic(err) } ApplicationConfig = InitApplication() cfgBasic := viper.Sub("basic") if cfgBasic == nil { panic("No found basic in the configuration") } BasicConfig = InitBasic(cfgBasic) cfgLog := viper.Sub("logger") if cfgLog == nil { panic("No found logger in the configuration") } LoggerConfig = InitLog(cfgLog) cfgRobot := viper.Sub("robot") if cfgLog == nil { panic("No found robot in the configuration") } RobotConfig = InitRobot(cfgRobot) cfgPostgres := viper.Sub("postgres") if cfgPostgres == nil { panic("No found postgres in the configuration") } PostgresConfig = InitPostgres(cfgPostgres) metadataApolloConfig := viper.Sub("metadata") if metadataApolloConfig == nil { panic("No found metadata in the configuration") } MetadataConfig = InitMetadata(metadataApolloConfig) }