package config import ( "fmt" "os" "gopkg.in/yaml.v3" ) // Config 应用配置 type Config struct { Gin GinConfig `json:"gin" yaml:"gin"` } // GinConfig Gin配置 type GinConfig struct { Port string `json:"port" yaml:"port"` } // getDefaultConfig 获取默认配置 func getDefaultConfig() *Config { return &Config{ Gin: GinConfig{ Port: "8850", }, } } // loadFromFile 从配置文件加载配置 func loadFromFile() (*Config, error) { configPaths := []string{ "./config.yaml", } for _, path := range configPaths { if _, err := os.Stat(path); err == nil { data, err := os.ReadFile(path) if err != nil { return nil, fmt.Errorf("read config file error: %w", err) } var config Config if err := yaml.Unmarshal(data, &config); err != nil { return nil, fmt.Errorf("unmarshal config file error: %w", err) } return &config, nil } } return nil, nil } // loadFromEnv 从环境变量加载配置 func loadFromEnv(config *Config) { // 加载 Gin 配置 if port := os.Getenv("GIN_PORT"); port != "" { config.Gin.Port = port } } // GetConfig 获取配置 func GetConfig() *Config { // 先加载默认配置 config := getDefaultConfig() // 再从配置文件加载 if fileConfig, err := loadFromFile(); err == nil && fileConfig != nil { // 合并配置文件中的配置 if fileConfig.Gin.Port != "" { config.Gin.Port = fileConfig.Gin.Port } } // 最后从环境变量加载 loadFromEnv(config) return config }