Анализ параллельных HTTP‑запросов и оценка недостатков подхода

В этом примере сетевых запросов вообще нет: fetchUrl всегда возвращает nil. При реальной реализации понадобятся ожидание, таймауты и закрытие тела ответа.

Короткий ответ

Что ответить на собеседовании

В этом примере сетевых запросов вообще нет: fetchUrl всегда возвращает nil. При реальной реализации понадобятся ожидание, таймауты и закрытие тела ответа.

Подробный разбор

Ответ с пояснениями

Условие

Необходимо рассмотреть представленный пример кода, который инициирует несколько HTTP‑запросов одновременно при помощи goroutine. Требуется определить, какие потенциальные проблемы могут возникнуть при таком способе выполнения и какие есть варианты их решения или оптимизации.

func main() {
    urls := []string{
        "https://www.lamoda.ru",
        "https://www.yandex.ru",
        "https://www.mail.ru",
        "https://www.google.com",
    }

    for _, url := range urls {
        go func(url string) {
            fmt.Printf("Fetching %s...\n", url)
            err := fetchUrl(url)
            if err != nil {
                fmt.Printf("Error fetching %s: %v\n", url, err)
                return
            }
            fmt.Printf("Fetched %s\n", url)
        }(url)
    }

    fmt.Println("All requests launched!")
    time.Sleep(400 * time.Millisecond)
    fmt.Println("Program finished.")
}

func fetchUrl(url string) error {
    // err := http.Get(url)
    return nil
}

Ответ

В этом примере сетевых запросов вообще нет: fetchUrl всегда возвращает nil. При реальной реализации понадобятся ожидание, таймауты и закрытие тела ответа.

Фиксированный Sleep не гарантирует завершение горутин; замените его WaitGroup или управляемой группой задач. Для большого числа URL ограничьте параллелизм и предусмотрите отмену.

http.Get возвращает (*http.Response, error), поэтому закомментированный вариант с одной переменной некорректен. После успешного запроса проверяют статус, читают тело согласно задаче и закрывают его. Используют общий HTTP-клиент с таймаутом. Параметр url передаётся в замыкание явно — ошибки захвата переменной здесь нет. Порядок сообщений конкурентных работников заранее не задан.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее