package config import ( "fmt" "os" "strings" ) type Config struct { ListenAddr string DatabaseURL string AuthDBPath string JWTSecret []byte TushareAPIURL string } func Load() (*Config, error) { cfg := &Config{ ListenAddr: getenv("LISTEN_ADDR", ":8080"), DatabaseURL: os.Getenv("DATABASE_URL"), AuthDBPath: getenv("AUTH_DB_PATH", "/app/auth/auth.db"), TushareAPIURL: getenv("TUSHARE_API_URL", "http://tushare:8000"), } if cfg.DatabaseURL == "" { return nil, fmt.Errorf("DATABASE_URL 环境变量未设置") } 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 }