package config import ( "log" "os" "strconv" "github.com/joho/godotenv" ) var Cfg Config // API 路径常量 const ( ImageGenerationsPath = "/v1/images/generations" ) type Config struct { // Server ServerAddr string // OpenAI Image OpenAIBaseURL string // API 基础地址,如 https://api.openai.com OpenAIAPIKey string OpenAIModel string RequestTimeout int ImageCount int ImageOutputDir string // Upload UploadURL string UploadAPIKey string // Proxy Proxy string // Admin AdminUsers string } func Load(envPath string) error { if _, err := os.Stat(envPath); err == nil { if err := godotenv.Load(envPath); err != nil { return err } } Cfg = Config{ ServerAddr: getEnv("SERVER_ADDR", "127.0.0.1:8000"), OpenAIBaseURL: getEnv("OPENAI_BASE_URL", "https://api.openai.com"), OpenAIAPIKey: os.Getenv("OPENAI_API_KEY"), OpenAIModel: getEnv("OPENAI_MODEL", "gpt-image-2"), RequestTimeout: getEnvInt("REQUEST_TIMEOUT", 120), ImageCount: getEnvInt("IMAGE_COUNT", 1), ImageOutputDir: getEnv("IMAGE_OUTPUT_DIR", "images"), UploadURL: os.Getenv("UPLOAD_URL"), UploadAPIKey: os.Getenv("UPLOAD_API_KEY"), Proxy: os.Getenv("PROXY"), AdminUsers: os.Getenv("ADMIN_USERS"), } if Cfg.OpenAIAPIKey == "" { log.Println("warn: OPENAI_API_KEY is empty") } return nil } func getEnv(key, def string) string { if v := os.Getenv(key); v != "" { return v } return def } func getEnvInt(key string, def int) int { v := os.Getenv(key) if v == "" { return def } n, err := strconv.Atoi(v) if err != nil { log.Printf("warn: invalid int for %s=%q, using default %d", key, v, def) return def } return n }