package config import ( "fmt" "os" "strings" ) type Config struct { ListenAddr string FuturesDBPath string AuthDBPath string JWTSecret []byte AdminUser string AdminPass string } func Load() (*Config, error) { cfg := &Config{ ListenAddr: getenv("LISTEN_ADDR", ":8080"), FuturesDBPath: getenv("FUTURES_DB_PATH", "/app/data/futures.db"), AuthDBPath: getenv("AUTH_DB_PATH", "/app/auth/auth.db"), AdminUser: strings.TrimSpace(os.Getenv("ADMIN_USER")), AdminPass: os.Getenv("ADMIN_PASS"), } secret := strings.TrimSpace(os.Getenv("JWT_SECRET")) if len(secret) < 16 { return nil, fmt.Errorf("JWT_SECRET 必须至少 16 个字符 (建议 openssl rand -hex 32)") } cfg.JWTSecret = []byte(secret) return cfg, nil } func getenv(key, fallback string) string { if v, ok := os.LookupEnv(key); ok && v != "" { return v } return fallback }