shad-go/fetchall
erius bfb0daa1ef Updated .gitignore to ignore .out and .test profiling files
Replaced interface{} with any in varfmt
Implemented varfmt, could be further optimized
2024-06-03 20:26:36 +03:00
..
main.go Updated .gitignore to ignore .out and .test profiling files 2024-06-03 20:26:36 +03:00
main_test.go update mod && fix links 2023-10-03 20:25:41 +03:00
README.md Add linter section to some readme files. 2020-02-22 03:29:32 +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.

Линтер

Установите 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