/
Praxis/

Структура проекта и парсинг аргументов

Контекст

Любая утилита командной строки начинается с умения принимать входные данные. Прежде чем писать основную логику загрузки, нужно заложить фундамент: создать правильную структуру проекта и научить программу "общаться" с пользователем через командную строку.

На этом этапе мы создадим "скелет" приложения, который пока ничего не скачивает, но уже умеет правильно обрабатывать ввод пользователя.

Ключевая концепция: Аргументы командной строки

Когда вы запускаете программу в терминале, всё что идёт после имени программы — это аргументы. В 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.

Цели этапа

Создать основу проекта и научить программу корректно парсить аргументы командной строки.

Что необходимо сделать:

  1. Создать структуру проекта:

    • Файл main.go с package main
    • Инициализировать модуль командой go mod init
  2. Реализовать парсинг аргументов:

    • Первый аргумент — путь к директории для сохранения файлов
    • Последующие аргументы — URL для скачивания (один или несколько)
  3. Обработать некорректный ввод:

    • Если аргументов меньше двух — вывести сообщение об использовании и завершить программу

Пример работы

$ 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...]

Полезные материалы

  • Command Line Arguments — Go by Example
  • os.Args — документация пакета os
  • Аргументы командной строки — на русском

Критерии

не проверялось
  • Файл main.go содержит package main и func main()
  • Файл go.mod существует с объявлением модуля
  • Путь для сохранения извлекается из os.Args[1]
  • URL извлекаются из os.Args[2:]
  • Проверяется длина os.Args перед обращением к элементам
Войдите в аккаунт, чтобы начать проект
Запустите первую проверку