Add retry
This commit is contained in:
25
main.go
25
main.go
@@ -88,6 +88,31 @@ func fileExtension(url string) string {
|
|||||||
|
|
||||||
// Скачиваем и сохраняем изображение
|
// Скачиваем и сохраняем изображение
|
||||||
func downloadImage(url, filename string) error {
|
func downloadImage(url, filename string) error {
|
||||||
|
const maxRetries = 3
|
||||||
|
const retryDelay = 1 * time.Second
|
||||||
|
|
||||||
|
var lastErr error
|
||||||
|
for attempt := 1; attempt <= maxRetries; attempt++ {
|
||||||
|
// Попытка скачать изображение
|
||||||
|
err := attemptDownload(url, filename)
|
||||||
|
if err == nil {
|
||||||
|
// Успешно скачали
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
lastErr = err
|
||||||
|
if attempt < maxRetries {
|
||||||
|
fmt.Printf("Attempt %d failed for %s: %v. Retrying in %v...\n",
|
||||||
|
attempt, url, err, retryDelay)
|
||||||
|
time.Sleep(retryDelay)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fmt.Errorf("all %d download attempts failed: %v", maxRetries, lastErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Одна попытка скачивания
|
||||||
|
func attemptDownload(url, filename string) error {
|
||||||
resp, err := http.Get(url)
|
resp, err := http.Get(url)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
Reference in New Issue
Block a user