package config import ( "os" "strings" "github.com/spf13/viper" ) // Config 是应用程序的主配置结构 type Config struct { Server ServerConfig `mapstructure:"server"` Database DatabaseConfig `mapstructure:"database"` Docker DockerConfig `mapstructure:"docker"` Auth AuthConfig `mapstructure:"auth"` Logger LoggerConfig `mapstructure:"logger"` } // Load 加载配置文件和环境变量 func Load() (*Config, error) { viper.SetConfigName("config") // 检查是否有环境变量指定使用开发配置 if os.Getenv("APP_ENV") == "development" { viper.SetConfigName("config.dev") } viper.SetConfigType("yaml") viper.AddConfigPath("./configs") viper.AddConfigPath(".") // 环境变量覆盖 viper.AutomaticEnv() viper.SetEnvKeyReplacer(strings.NewReplacer(".", "_")) // 读取配置文件 if err := viper.ReadInConfig(); err != nil { // 配置文件不存在时不返回错误 if _, ok := err.(viper.ConfigFileNotFoundError); !ok { return nil, err } } var cfg Config if err := viper.Unmarshal(&cfg); err != nil { return nil, err } return &cfg, nil } // Validate 验证配置是否有效 func (c *Config) Validate() error { if err := c.Server.Validate(); err != nil { return err } if err := c.Database.Validate(); err != nil { return err } if err := c.Docker.Validate(); err != nil { return err } if err := c.Auth.Validate(); err != nil { return err } if err := c.Logger.Validate(); err != nil { return err } return nil }