shad-go/fetchall
2020-02-16 17:18:51 +03:00
..
main.go Add concurrent url fetch. 2020-02-13 19:00:29 +03:00
main_test.go Use require.NoError where appropriate 2020-02-16 17:18:51 +03:00
README.md Fix http request docs ref. 2020-02-14 13:26:46 +03:00

fetchall

В этой задаче нужно написать консольную утилиту, которая принимает на вход произвольное количество http URL'ов и скачивает их содержимое конкурентно.

Программа не должна останавливаться на невалидном URL'e. Текст ответов можно игнорировать. Вместо этого можно залогировать прогресс в произвольном формате.

Пример:

$ fetchall https://gopl.io golang.org http://golang.org
Get golang.org: unsupported protocol scheme ""
1.05s    11071  http://golang.org
2.18s     4154  https://gopl.io
2.18s elapsed

В примере логируются времена обработки индивидуальных запросов, размеры ответов и общее время работы программы. Можно видеть, что общее время работы равно максимуму, а не сумме времён индивидуальных запросов.

Проверка решения

Для запуска тестов нужно выполнить следующую команду:

go test -v ./fetchall/...

Запуск программы

go run -v ./fetchall/main.go

Компиляция

go install ./fetchall/...

После выполнения в $GOPATH/bin появится исполняемый файл с именем fetchall.

Ссылки

  1. Чтение аргументов командной строки: https://gobyexample.com/command-line-arguments
  2. HTTP запрос: https://golang.org/pkg/net/http/
  3. Запуск горутин: https://gobyexample.com/goroutines
  4. Ожидание завершения горутин: https://gobyexample.com/channels
  5. Замер времени: https://golang.org/pkg/time/#Since