package config import ( "bufio" "os" "path/filepath" "strconv" "strings" ) var ( BLOG_ROOT string CONTENT_DIR string RECYCLE_DIR string ARTALK_SERVER = "https://artalk.usj.cc" ARTALK_SITE = "???" ITEMS_PER_PAGE = 20 RECYCLE_DAYS = 30 HUGO_PREVIEW = "http://localhost:1313" RSS_API_BASE string RSS_API_TOKEN string SCF_PROXY string WECHAT_APP_ID string WECHAT_APP_SECRET string DEEPSEEK_API_KEY string DEEPSEEK_BASE_URL string DEEPSEEK_MODEL string ) func Init() { cwd, _ := os.Getwd() BLOG_ROOT = filepath.Clean(filepath.Join(cwd, "..")) CONTENT_DIR = filepath.Join(BLOG_ROOT, "content", "post") RECYCLE_DIR = filepath.Join(cwd, ".recycle") loadEnv() RSS_API_BASE = getEnv("RSS_API_BASE", "https://api.usj.cc") RSS_API_TOKEN = os.Getenv("RSS_API_TOKEN") SCF_PROXY = getEnv("SCF_PROXY", "") WECHAT_APP_ID = os.Getenv("WECHAT_APP_ID") WECHAT_APP_SECRET = os.Getenv("WECHAT_APP_SECRET") DEEPSEEK_API_KEY = os.Getenv("DEEPSEEK_API_KEY") DEEPSEEK_BASE_URL = getEnv("DEEPSEEK_BASE_URL", "https://api.deepseek.com") DEEPSEEK_MODEL = getEnv("DEEPSEEK_MODEL", "deepseek-chat") } func loadEnv() { envPaths := []string{ filepath.Join(BLOG_ROOT, "write-go", ".env"), filepath.Join(BLOG_ROOT, "write", ".env"), } for _, p := range envPaths { f, err := os.Open(p) if err != nil { continue } scanner := bufio.NewScanner(f) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) if line == "" || strings.HasPrefix(line, "#") { continue } parts := strings.SplitN(line, "=", 2) if len(parts) != 2 { continue } key := strings.TrimSpace(parts[0]) val := strings.TrimSpace(parts[1]) if os.Getenv(key) == "" { os.Setenv(key, val) } } f.Close() break } } func getEnv(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback } func GetEnvInt(key string, fallback int) int { if v := os.Getenv(key); v != "" { if n, err := strconv.Atoi(v); err == nil { return n } } return fallback }