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

57 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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](https://github.com/golangci/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
4. Замер времени: https://golang.org/pkg/time/#Since