context.WithTimeout(ctx, 5*time.Second)?Создаёт контекст, который автоматически отменяется через указанный таймаут (или при вызове возвращённой cancel). По сути обёртка над WithDeadline. Канал ctx.Done() закрывается при отмене.
ctx, cancel := context.WithTimeout(ctx, 5*time.Second)
defer cancel()
resp, err := http.DefaultClient.Do(req.WithContext(ctx))