Быстрый старт Cobra — создано для программ командной строки | Августовское задание по обновлению

задняя часть Go
Быстрый старт Cobra — создано для программ командной строки | Августовское задание по обновлению

Добавить Автора
Блог:В следующий раз после. can /blog/go wave…

смотрел недавноIstio(ОдинService MeshFramework) Связанные вещи и нашли новую вещь при рассмотрении своего исходного кодаCobra, я обнаружил, что это хорошая вещь, и ее можно использовать во многих местах, например:Docker,KubernetesПодождите, пока он появится. Чтобы лучше понять эти платформы с открытым исходным кодом (например,Istio,Kubernetesд.), необходимоCobraСделайте подробное понимание, будет много мест, где это может быть использовано в будущем. сегодняCobraЧтобы сделать целое введение, дайте нам знать об этом, возможно, оно будет использоваться в вашем проекте в вашем проекте.

1. Знакомство с Коброй

1.1 Обзор кобры

Cobra— это пакет Golang, предоставляющий простой интерфейс для создания программ командной строки. в то же время,CobraЭто также приложение, используемое для создания фреймворков приложений для разработкиCobraоснованные приложения.

Cobra

1.2 Основные функции

Основные функции Cobra следующие:

  • Простые режимы подкомандной строки, такие какapp server,app fetchи т.п.
  • полностью совместимыйposixрежим командной строки.
  • Вложенные подкомандыsubcommand.
  • Поддержка глобальной, локальной, конкатенацииflags.
  • использоватьcobraЛегко создавать приложения и команды (cobra init appnameа такжеcobra add cmdname).
  • Предоставлять интеллектуальные подсказки (например, выводapp srverкоманда, предложит вам ввестиapp server? ).
  • Создано автоматическиcommandsа такжеflagsсправочная информация.
  • Автоматически генерировать подробныеhelpИнформация, такая какapp -help.
  • помощь в автоматическом распознаванииflag,-h,--help.
  • Автоматически генерировать приложения вbashАвтодополнение для следующей команды.
  • автоматически сгенерированное приложениеmanруководство.
  • Псевдоним командной строки.
  • настроитьhelpа такжеusageИнформация.
  • опционально сviperплотная интеграция.

Для программ командной строки перечисленные выше функции просто созданы специально.

1.3 Пример применения

CobraИспользуется во многих проектах Go, таких как:Kubernetes,Hugoа такжеGithub CLIи т. д., более широко используемые элементы:

(Источник:GitHub.com/commodity13/cobra…)

После их прочтения одно слово "нравится" и два слова "отлично"!

понялCobraпозже, посмотрите на этиKubernetes,etcd,RegistryКогда я жду код проекта с открытым исходным кодом, я, наверное, умею его читать, и этому я учусьCobraцель.

2. Концепция

Кобра управляется командами (commands),параметр(arguments), опции (flags) был создан.

Прежде чем подробно разбираться и использовать Cobra, необходимо заранее знать некоторые понятия: команда (commands),параметр(arguments), опции (flags) эти понятия.

  • commands: Команда представляет поведение, обычно представляет действие, то есть запущенную службу двоичных команд. Может также иметь дочерние команды
  • arguments: Аргументы представляют собой аргументы командной строки.
  • flags: параметры представляют собой изменения в поведении командной строки, т. е. параметры командной строки. Параметры конфигурации бинарных команд, которые могут соответствовать конфигурационным файлам. Параметры можно разделить на глобальные параметры и параметры подкоманд.

Лучшие программы командной строки при реальном использовании должны быть похожи на чтение красивого предложения и могут более интуитивно понимать, как взаимодействовать с пользователем. Выполнение программы командной строки должно следовать общему формату:APPNAME VERB NOUN --ADJECTIVEилиAPPNAME COMMAND ARG --FLAG.

Например следующий пример:

# server是 commands,port 是 flag
hugo server --port=1313

# clone 是 commands,URL 是 arguments,brae 是 flag
git clone URL --bare

Другой пример:

xcbeyond@xcbeyonddeMacBook-Pro ~ % docker info --help 

Usage:  docker info [OPTIONS]

Display system-wide information

Options:
  -f, --format string   Format the output using the given Go template

Вы правильно прочитали. Cobra используется для реализации таких сложных команд, как Docker. В следующем разделе давайте посмотрим, как реализовать набор собственных инструментов командной строки.

3. Cobra Combat

Практика — лучший способ научиться!Этот раздел быстро перенесет вас к Кобре из реального боя.

3.1 Подготовка окружающей среды

3.1.1 Предпосылки и среда

  • Операционная система: Mac OS
  • Перейти к среде: перейти 1.16
  • Разработка IDE для Go: VSCode

(Вышеуказанная среда может определяться личной средой без ограничений)

3.1.2 Установка кобры

использоватьgo getкоманда, чтобы получить последнюю версию библиотеки Cobra. Следующая команда установит Cobra и связанные с ней зависимости:

go get -u github.com/spf13/cobra/cobra

После загрузки и установки Cobra откройте каталог GOPATH, и программа cobra (Window: cobra.exe, MacOS: cobra) будет загружена в каталог bin.

3.1.3 Инициализация проекта (генератор кода Cobra)

Предположим, вам нужно разработать программу командной строки на основе интерфейса командной строки Cobra с именемcobra-demo.

Поскольку Cobra предоставляет функцию генератора кода, мы можем напрямую использовать команду инициализации, предоставляемую Cobra.cobra initСоздайте проект Cobra для быстрой инициализации.

переключиться наGOPATHкаталог (например,/Users/xcbeyond/github), выполнение заказаcobra init <name> --pkg-name <pkgname>,следующим образом:

xcbeyond@xcbeyonddeMacBook-Pro github % .\bin\cobra init cobra-demo --pkg-name github.com/xcbeyond/cobra-demo
Your Cobra application is ready at
/Users/xcbeyond/github/cobra-demo

После успешной инициализации структура каталогов программы cobra-demo выглядит следующим образом:

.
├── cmd
│   ├── root.go
│   └── show.go
├── go.mod
├── go.sum
└── main.go

3.1.4 Бег

Выполнение заказаgo runбегать:

xcbeyond@xcbeyonddeMacBook-Pro cobra-demo % go run main.go
A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.

3.2 Настоящий бой

Вот простойtimeКомандование в качестве примера, фактический бой объясняет, как развить команду в Cobra.

Функции следующие:

  • show: просмотр текущего времени.
  • parse: укажите формат времени –format, parse является подкомандой show.

3.2.1 Реализация команды show (Командная команда)

  1. добавить команду шоу

    по командеcobra addДобавьте команду шоу:

     xcbeyond@xcbeyonddeMacBook-Pro cobra-demo % ../bin/cobra add show
     show created at /Users/xcbeyond/github/cobra-demo
    

    На этом этапе каталог проекта создастshow.goфайл, в котором может быть завершена конкретная логика работы команды.

    Нижеshow.goИсходный код файла:

    // showCmd represents the show command
    var showCmd = &cobra.Command{
        Use:   "show",
        Short: "A brief description of your command",
        Long: `A longer description that spans multiple lines and likely contains examples
    and usage of using your command. For example:
    
    Cobra is a CLI library for Go that empowers applications.
    This application is a tool to generate the needed files
    to quickly create a Cobra application.`,
        Run: func(cmd *cobra.Command, args []string) {
            fmt.Println("show called")
        },
    }
    
    func init() {
        rootCmd.AddCommand(showCmd)
    
        // Here you will define your flags and configuration settings.
    
        // Cobra supports Persistent Flags which will work for this command
        // and all subcommands, e.g.:
        // showCmd.PersistentFlags().String("foo", "", "A help for foo")
    
        // Cobra supports local flags which will only run when this command
        // is called directly, e.g.:
        // showCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
    }
    

    &cobra.CommandВ качестве определения команды существуют следующие переменные:

    • Use: Используется для указания конкретных команд, таких как: show.
    • Short: Краткое описание команды.
    • Long: Подробное описание команды.
    • Run: Запись выполнения команды, используемая для реализации конкретной логики обработки команды.

    rootCmd.AddCommand(showCmd)Добавление команд, добавляет команду к корневой команде. (Cobra поддерживает подкоманды команд)

  2. Реализовать логику для отображения текущего времени

    Добавьте логику для получения текущего времени в &cobra.Command.Runtime.Now():

    var showCmd = &cobra.Command{
        Use:   "show",
        Short: "A brief description of your command",
        Long: `A longer description that spans multiple lines and likely contains examples
    and usage of using your command. For example:
    
    Cobra is a CLI library for Go that empowers applications.
    This application is a tool to generate the needed files
    to quickly create a Cobra application.`,
        Run: func(cmd *cobra.Command, args []string) {
            // show current time
            fmt.Println(time.Now())
        },
    }
    
  3. Изменить команду справки

    Есть две команды справки, одна короткая, а другая - Lang. Очевидно, что короткая команда используется для определения короткого описания, а команда Lang используется для определения подробного описания. Давайте модифицируем справку команды Show:

    var showCmd = &cobra.Command{
        Use:   "show",
        Short: "Displays the current time",
        Long: `You can use the time show command to view the current time. For example:
    
    $ ./cobra-demo show
    2021-03-19 14:34:20.9320241 +0800 CST m=+0.378845301`,
        Run: func(cmd *cobra.Command, args []string) {
            // show current time
            fmt.Println(time.Now())
        },
    }
    
  4. бегать

    Выполните команду шоу:

    xcbeyond@xcbeyonddeMacBook-Pro cobra-demo % go run main.go show
    2021-07-31 14:49:27.3582836 +0800 CST m=+0.176660901
    

    Выполните команду show –help:

    xcbeyond@xcbeyonddeMacBook-Pro cobra-demo % go run main.go show --help
    You can use the time show command to view the current time. For example:
    
    $ ./cobra-demo show
    2021-07-31 14:34:20.9320241 +0800 CST m=+0.378845301
    
    Usage:
    cobra-demo show [flags]
    
    Flags:
    -h, --help   help for show
    
    Global Flags:
            --config string   config file (default is $HOME/.cobra-demo.yaml)
    

4. Резюме

Cobra-demo просто кратко объяснил, что он состоит из нескольких частей.В реальных проектах это намного сложнее.Как правило, он имеет несколько подкоманд, но основное содержание похоже.