Files
xyou 9500c4c80a
CI / Go Backend (push) Canceled after 0s
FIRST
2026-08-07 23:39:47 +08:00

59 lines
1.5 KiB
Go

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
}