package config import ( "fmt" "os" "strconv" ) // ServiceConfig holds configuration shared across all microservices. type ServiceConfig struct { Name string // 服务名称,如 auth-service Port string // 监听端口 // 基础设施连接(骨架阶段仅定义,暂不使用) PostgresDSN string RedisAddr string MinIOAddr string RabbitMQURL string // 运行环境: debug / release GinMode string } // Load 从环境变量加载配置,fallback 到默认值。 // serviceName 和 defaultPort 用于在没有设置环境变量时提供默认值。 func Load(serviceName, defaultPort string) *ServiceConfig { cfg := &ServiceConfig{ Name: serviceName, Port: envOr("SERVICE_PORT", defaultPort), PostgresDSN: envOr("POSTGRES_DSN", "postgres://mrcc:mrcc_dev_2026@localhost:5432/mrcc?sslmode=disable"), RedisAddr: envOr("REDIS_ADDR", "localhost:6379"), MinIOAddr: envOr("MINIO_ADDR", "localhost:9000"), RabbitMQURL: envOr("RABBITMQ_URL", "amqp://mrcc:mrcc_dev_2026@localhost:5672/"), GinMode: envOr("GIN_MODE", "debug"), } return cfg } // Address 返回 :port 格式的监听地址 func (c *ServiceConfig) Address() string { return fmt.Sprintf(":%s", c.Port) } func envOr(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback } func envIntOr(key string, fallback int) int { if v := os.Getenv(key); v != "" { if n, err := strconv.Atoi(v); err == nil { return n } } return fallback }