shad-go/fetchall/README.md
2020-02-22 03:29:32 +03:00

2.2 KiB
Raw Blame History

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.

Линтер

Установите golangci-lint, если вы ещё этого не сделали, и проверьте решение перед отправкой!

golangci-lint -v run ./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