Любая утилита командной строки начинается с умения принимать входные данные. Прежде чем писать основную логику загрузки, нужно заложить фундамент: создать правильную структуру проекта и научить программу "общаться" с пользователем через командную строку.
На этом этапе мы создадим "скелет" приложения, который пока ничего не скачивает, но уже умеет правильно обрабатывать ввод пользователя.
Когда вы запускаете программу в терминале, всё что идёт после имени программы — это аргументы. В Go они доступны через — срез строк, где первый элемент — путь к программе, а остальные — переданные аргументы.
// os.Args для команды: ./downloader ./downloads http://example.com/file.zip // os.Args[0] = "./downloader" // os.Args[1] = "./downloads" // os.Args[2] = "http://example.com/file.zip" if len(os.Args) < 3 { fmt.Println("Использование: downloader <директория> <url1> [url2...]") os.Exit(1) } savePath := os.Args[1] urls := os.Args[2:]
💡 Gotcha:
os.Args[0]— это всегда путь к самой программе, а не первый аргумент. Реальные аргументы начинаются с индекса 1.
Создать основу проекта и научить программу корректно парсить аргументы командной строки.
Что необходимо сделать:
Создать структуру проекта:
main.go с package maingo mod initРеализовать парсинг аргументов:
Обработать некорректный ввод:
$ go run main.go ./downloads http://example.com/file1.zip http://example.com/file2.zip Директория для сохранения: ./downloads URL для скачивания: - http://example.com/file1.zip - http://example.com/file2.zip
При ошибке:
$ go run main.go Использование: downloader <директория> <url1> [url2...]
main.go содержит package main и func main()go.mod существует с объявлением модуляos.Args[1]os.Args[2:]os.Args перед обращением к элементам