Что это такое?
urfave/cli — это пакет для Go, с помощью которого создают консольные утилиты. Вы объявляете команды, подкоманды и флаги прямо в Go-коде, а пакет сам берёт на себя разбор аргументов, справку и автодополнение в shell.
То есть это библиотека, которую я подключаю в свой Go-проект, а не программа, которую скачивают и запускают?
Верно — это Go-пакет, который становится частью вашей консольной утилиты. Он определяет, как ваше приложение разбирает флаги, как устроены подкоманды и как выводится справка; сам по себе он ничего не делает.
Как добавить его в проект?
Выполните go get github.com/urfave/cli/v3 в своём Go-модуле, затем опишите команды и флаги в коде. На сайте документации пошагово разобрано создание первого приложения.
Потянет ли он за собой кучу зависимостей?
Нет. Единственная зависимость — стандартная библиотека Go, так что подключение остаётся лёгким.
Какие флаги можно объявлять?
Флаги для простых типов, срезов простых типов, времени, длительности и не только. Работают и составные короткие флаги: пользователь может ввести -abc вместо -a -b -c.
Может ли моя утилита брать настройки не только из командной строки?
Да. Значения можно брать из переменных окружения, обычных текстовых файлов и структурированных форматов — последние обрабатываются отдельным модулем urfave/cli-altsrc (JSON, TOML и YAML).
Автодополнение в shell для пользователей моей утилиты будет работать сразу, из коробки?
Да — пакет сам генерирует динамическое автодополнение для bash, zsh, fish и powershell.
Мне придётся самому писать man-страницы или документацию в Markdown для моих команд?
Нет — urfave/cli умеет генерировать документацию в форматах man и Markdown через модуль urfave/cli-docs.
What are similar projects?
cheat, inshellisense, yq, terminalizer, oh-my-posh, gvm, ipatool, viper
Which topics is it in?
environment-variables, toml, golang-library, autocomplete, config, declarative, no-dependencies, powershell, yaml, bash, json, command-line