package config import ( "sync" "git.x2erp.com/qdy/go-base/config/subconfigs" ) // IConfig 主配置接口 type IConfig interface { GetDatabase() *subconfigs.DatabaseConfig GetRedis() *subconfigs.RedisConfig GetDoris() *subconfigs.DorisConfig GetRabbitMQ() *subconfigs.RabbitMQConfig GetAuth() *subconfigs.AuthConfig GetService() *subconfigs.ServiceConfig GetHTTP() *subconfigs.HTTPConfig GetMicro() *subconfigs.MicroConfig GetLog() *subconfigs.LogConfig GetInitError() error IsDatabaseConfigured() bool IsDorisConfigured() bool IsRedisConfigured() bool } // Config 主配置结构体 - 访问门面 type Config struct { initError error // 初始化错误 } // 实现IConfig接口 - 从注册表获取配置 func (c *Config) GetDatabase() *subconfigs.DatabaseConfig { if config := subconfigs.GetRegisteredConfig("database"); config != nil { return config.(*subconfigs.DatabaseConfig) } return nil } func (c *Config) GetRedis() *subconfigs.RedisConfig { if config := subconfigs.GetRegisteredConfig("redis"); config != nil { return config.(*subconfigs.RedisConfig) } return nil } func (c *Config) GetDoris() *subconfigs.DorisConfig { if config := subconfigs.GetRegisteredConfig("doris"); config != nil { return config.(*subconfigs.DorisConfig) } return nil } func (c *Config) GetRabbitMQ() *subconfigs.RabbitMQConfig { if config := subconfigs.GetRegisteredConfig("rabbitmq"); config != nil { return config.(*subconfigs.RabbitMQConfig) } return nil } func (c *Config) GetAuth() *subconfigs.AuthConfig { if config := subconfigs.GetRegisteredConfig("auth"); config != nil { return config.(*subconfigs.AuthConfig) } return nil } func (c *Config) GetService() *subconfigs.ServiceConfig { if config := subconfigs.GetRegisteredConfig("service"); config != nil { return config.(*subconfigs.ServiceConfig) } return nil } func (c *Config) GetHTTP() *subconfigs.HTTPConfig { if config := subconfigs.GetRegisteredConfig("http"); config != nil { return config.(*subconfigs.HTTPConfig) } return nil } func (c *Config) GetMicro() *subconfigs.MicroConfig { if config := subconfigs.GetRegisteredConfig("micro"); config != nil { return config.(*subconfigs.MicroConfig) } return nil } func (c *Config) GetLog() *subconfigs.LogConfig { if config := subconfigs.GetRegisteredConfig("log"); config != nil { return config.(*subconfigs.LogConfig) } return nil } func (c *Config) GetInitError() error { return c.initError } var ( cfgInstance *Config once sync.Once ) // GetConfig 获取主配置(单例模式) func GetConfig() IConfig { once.Do(func() { cfgInstance = &Config{} cfgInstance.initError = LoadConfig() // 加载配置到注册表 }) return cfgInstance } // GetInitError 包级函数 - 兼容现有代码调用 func GetInitError() error { return cfgInstance.GetInitError() } // GetConfigWithError 新方法 - 同时获取配置和错误 func GetConfigWithError() (IConfig, error) { cfg := GetConfig() return cfg, cfg.GetInitError() } // 实现 IConfig 接口的 IsDatabaseConfigured 方法 func (c *Config) IsDatabaseConfigured() bool { return c.GetDatabase().IsConfigured() } // 实现 IConfig 接口的 IsDorisConfigured 方法 func (c *Config) IsDorisConfigured() bool { return c.GetDoris().IsConfigured() } // 实现 IConfig 接口的 IsDorisConfigured 方法 func (c *Config) IsRedisConfigured() bool { return c.GetRedis().IsConfigured() }