.. | ||
main.go | ||
main_test.go | ||
README.md |
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/...
Ссылки
- Чтение аргументов командной строки: https://gobyexample.com/command-line-arguments
- HTTP запрос: https://golang.org/pkg/net/http/
- Запуск горутин: https://gobyexample.com/goroutines
- Ожидание завершения горутин: https://gobyexample.com/channels
- Замер времени: https://golang.org/pkg/time/#Since