package cache import ( "fmt" "io/ioutil" "net/http" "os" "path/filepath" "train/pkg/paths" ) var cacheDir = filepath.Join(paths.BaseDir(), "cache") func GetCachedFile(url string) (string, error) { if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil { return "", err } fileName := filepath.Join(cacheDir, filepath.Base(url)) if _, err := os.Stat(fileName); err == nil { return fileName, nil } return "", nil } func SaveToCache(url string, data []byte) (string, error) { if err := os.MkdirAll(cacheDir, os.ModePerm); err != nil { return "", err } fileName := filepath.Join(cacheDir, filepath.Base(url)) if err := ioutil.WriteFile(fileName, data, 0644); err != nil { return "", err } fmt.Printf("Сохранено в кэш: %s\n", fileName) return fileName, nil } func DownloadWithCache(url string) (string, error) { if cached, err := GetCachedFile(url); err == nil && cached != "" { return cached, nil } resp, err := http.Get(url) if err != nil { return "", err } defer resp.Body.Close() data, err := ioutil.ReadAll(resp.Body) if err != nil { return "", err } return SaveToCache(url, data) }