package config import ( "log" "os" "path/filepath" "github.com/joho/godotenv" ) // Config 应用配置 type Config struct { Port string DBHost string DBPort string DBUser string DBPass string DBName string JWTSecret string RedisURL string S3Bucket string } // Load 加载配置(优先读取环境变量,支持 .env 文件) // 查找顺序:可执行文件同目录 → 当前目录 → 环境变量 func Load() *Config { // 从可执行文件所在目录加载 .env(宝塔场景) if exe, err := os.Executable(); err == nil { exeDir := filepath.Dir(exe) _ = godotenv.Load(filepath.Join(exeDir, ".env")) } // 从当前目录加载 .env(本地开发场景) _ = godotenv.Load() c := &Config{ Port: getEnv("PORT", "8080"), DBHost: getEnv("DB_HOST", "127.0.0.1"), DBPort: getEnv("DB_PORT", "3306"), DBUser: getEnv("DB_USER", "root"), DBPass: getEnv("DB_PASS", ""), DBName: getEnv("DB_NAME", "inchstep"), JWTSecret: getEnv("JWT_SECRET", "dev-secret-change-in-production"), RedisURL: getEnv("REDIS_URL", "redis://127.0.0.1:6379/0"), S3Bucket: getEnv("S3_BUCKET", ""), } log.Println("[寸进] 配置加载完成") log.Printf("[寸进] DB: %s:%s/%s", c.DBHost, c.DBPort, c.DBName) log.Printf("[寸进] JWT: %s...", maskSecret(c.JWTSecret, 8)) log.Printf("[寸进] Redis: %s", c.RedisURL) return c } func getEnv(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback } func maskSecret(s string, keep int) string { if len(s) <= keep { return s } return s[:keep] + "..." }