Эйч
Эйч
  • Все менторы
Задачи/Go-разработчик/Параллельная загрузка контента с сайтов

Параллельная загрузка контента с сайтов

Условие задачи

Необходимо реализовать функцию ParallelDownload, которая должна параллельно обрабатывать входящие URL-адреса с помощью заданного количества воркеров и возвращать карту с результатами скачивания контента для каждого сайта

gopackage main

import (
  "context"
  "fmt"
  "math/rand"
  "time"
)

type SiteContent struct {
  Title   string
  Date    time.Time
  Content string
}

// Функция для имитации долгой работы, загрузки контента сайта
func DownloadSiteContent(ctx context.Context, url string) SiteContent {
  // Генерация случайного времени ожидания от 5 до 10 секунд
  rand.Seed(time.Now().UnixNano())
  sleepTime := time.Duration(rand.Intn(6)+5) * time.Second

  // Ожидание случайного времени
  time.Sleep(sleepTime)

  // Возвращаем имитацию контента сайта
  return SiteContent{
    Title:   "Заголовок сайта " + url,
    Date:    time.Now(),
    Content: "Содержание сайта " + url,
  }
}

// Функция для параллельного скачивания контента сайтов
func ParallelDownload(ctx context.Context, urls <-chan string, numWorkers int) map[string]SiteContent {
  // TODO
  return nil
}

func main() {
  urls := make(chan string)

  // Запускаем функцию для параллельного скачивания контента
  go func() {
    urls <- "http://example.com"
    urls <- "http://example.org"
    urls <- "http://example.net"
    close(urls)
  }()

  // Запускаем параллельное скачивание с максимальным количеством воркеров
  result := ParallelDownload(context.Background(), urls, 3)

  // Выводим результаты
  for url, content := range result {
    fmt.Printf("Сайт: %s\nЗаголовок: %s\nДата: %s\nСодержание: %s\n\n",
      url, content.Title, content.Date, content.Content)
  }
}

Профессия

Go-разработчик

Сопроводим до оффера

Умножим шансы на каждом этапе поиска и поможем получить выгодный оффер

Узнать больше

Сервис развития карьеры

Контактыteam@h.careers@hcareers
TelegramVKYouTubeLinkedIn
Профессии
Компания
С чем помогаемОтзывыВопросы и ответыСертификатыВебинарыСтать ментором

Платформа принадлежит ООО "Эйч Карьера"
ИНН 9710095807 ОГРН 1227700077340
Адрес: 127006, город Москва, Старопименовский пер, д. 18 стр. 2, помещ./ком./этаж I/19/2

Copyright © 2020-2025 Сервис развития карьеры Эйч. Все права защищены.

Политика конфиденциальностиПользовательское соглашениеОферта