Вопрос: Как сделать `context`-aware запрос к внешнему сервису с ретраями?

Go Senior Без компании
Вопрос: Как сделать `context`-aware запрос к внешнему сервису с ретраями?
Ответы
```go for i := 0; i < 3; i++ { if ctx.Err() != nil { return ctx.Err() } req, _ := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) resp, err := client.Do(req) if err == nil && resp.StatusCode/100 == 2 { resp.Body.Close() return nil } if resp != nil { resp.Body.Close() } time.Sleep(time.Duration(i+1) * 200 * time.Millisecond) } return fmt.Errorf("failed") ``` **Как это работает:** проверка `ctx.Err()` позволяет прекратить ретраи при отмене/таймауте.