2020-02-13 19:54:24 +00:00
|
|
|
|
## urlfetch
|
|
|
|
|
|
|
|
|
|
В этой задаче нужно написать консольную утилиту,
|
2021-03-30 23:33:11 +00:00
|
|
|
|
которая принимает на вход произвольное количество http URL'ов и последовательно скачивает их содержимое.
|
2020-02-13 19:54:24 +00:00
|
|
|
|
|
|
|
|
|
При обработке невалидного URL'а программа должна завершаться с ненулевым exit кодом.
|
|
|
|
|
|
|
|
|
|
### Примеры
|
|
|
|
|
|
|
|
|
|
Успешный запуск:
|
|
|
|
|
```
|
|
|
|
|
$ urlfetch https://golang.org https://go.dev
|
|
|
|
|
<!DOCTYPE html>
|
|
|
|
|
<html lang="en">
|
|
|
|
|
<meta charset="utf-8">
|
|
|
|
|
<meta name="description" content="Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.">
|
|
|
|
|
...
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
Неуспешный запуск:
|
|
|
|
|
```
|
|
|
|
|
$ urlfetch golang.org
|
|
|
|
|
fetch: Get golang.org: unsupported protocol scheme ""
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Проверка решения
|
|
|
|
|
|
|
|
|
|
Для запуска тестов нужно выполнить следующую команду:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
go test -v ./urlfetch/...
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Запуск программы
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
go run -v ./urlfetch/main.go
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Компиляция
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
go install ./urlfetch/...
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
После выполнения в `$GOPATH/bin` появится исполняемый файл с именем `urlfetch`.
|
|
|
|
|
|
2020-02-22 00:29:32 +00:00
|
|
|
|
### Линтер
|
|
|
|
|
|
|
|
|
|
Установите [golangci-lint](https://github.com/golangci/golangci-lint), если вы ещё этого не сделали, и проверьте решение перед отправкой!
|
|
|
|
|
```
|
|
|
|
|
golangci-lint -v run ./urlfetch/...
|
|
|
|
|
```
|
|
|
|
|
|
2020-02-13 19:54:24 +00:00
|
|
|
|
### Walkthrough
|
|
|
|
|
|
|
|
|
|
1. Чтение аргументов командной строки: https://gobyexample.com/command-line-arguments
|
2020-02-14 10:26:46 +00:00
|
|
|
|
2. HTTP запрос: https://golang.org/pkg/net/http/
|