一架梯子,一头程序猿,仰望星空!
Go Cobra教程 > 内容正文

Go Cobra命令


Cobra生成器

Cobra提供了一个脚手架,用于快速生成命令代码框架,它将创建你的应用程序并添加任何你想要的命令。这是将Cobra集成到你的应用程序中最简单的方式。

通过命令go install github.com/spf13/cobra-cli@latest安装Cobra生成器。
Go将自动将其安装在你的$GOPATH/bin目录中,该目录应该在你的$PATH中。

安装完成后,你应该可以使用cobra-cli命令。在命令行中输入cobra-cli确认是否可用。

目前Cobra生成器仅支持两个操作:

cobra-cli init

cobra-cli init [app]命令将为你创建初始的应用程序代码。它是一个非常强大的应用程序,它会为你的程序填充正确的结构,因此你可以立即享受Cobra的所有优势。它还可以应用你指定的许可证到你的应用程序中。

随着Go模块的引入,Cobra生成器已经简化为利用模块的功能。Cobra生成器从Go模块内部工作。

初始化模块

如果你已经有一个模块,请跳过这个步骤。

如果要初始化一个新的Go模块:

  1. 创建一个新的目录
  2. 进入该目录
  3. 运行go mod init <MODNAME>

例如:

cd $HOME/code
mkdir myapp
cd myapp
go mod init github.com/spf13/myapp

初始化Cobra CLI应用程序

在一个Go模块中运行cobra-cli init。这将为您创建一个新的基本项目供您编辑。

你应该能够立即运行你的新应用程序。尝试使用go run main.go运行它。

你将要打开并编辑’cmd/root.go’,并提供你自己的描述和逻辑。

例如:

cd $HOME/code/myapp
cobra-cli init
go run main.go

cobra-cli init也可以在子目录中运行,例如cobra generator自身的组织方式
如果你想将应用程序代码与库代码分开保存,这很有用。

可选标志:

你可以使用--author标志提供你的作者名字。
例如 cobra-cli init --author "Steve Francia spf@spf13.com"

你可以使用--license来提供一个许可证。
例如 cobra-cli init --license apache

使用--viper标志自动设置viper

Viper是Cobra的伴侣,旨在提供对环境变量和配置文件的轻松处理,并将它们无缝地连接到应用程序标志中。

添加命令到项目中

一旦初始化了 cobra 应用程序,您可以继续使用 Cobra 生成器向您的应用程序新增命令。执行此操作的命令是 cobra-cli add

假设您创建了一个应用程序,并希望为其添加以下命令:

  • app serve
  • app config
  • app config create

在项目目录(即包含 main.go 文件的目录)中运行以下命令:

cobra-cli add serve
cobra-cli add config
cobra-cli add create -p 'configCmd'

cobra-cli add 支持与 cobra-cli init 相同的可选标志(如上所述)。

您会注意到最后一个命令带有一个 -p 标志。这用于将新添加的命令分配给父命令。在本例中,我们希望将 “create” 命令分配给 “config” 命令。如果未指定,默认情况下所有命令的父命令为 rootCmd

默认情况下,cobra-cli 会在提供的名称后添加 Cmd,并将此名称用作内部变量名。在指定父命令时,请确保与代码中使用的变量名相匹配。

注意:命令名称请使用驼峰命名法(不要使用蛇形命名法/短横线命名法)。否则,会遇到错误。例如,cobra-cli add add-user 是不正确的,但 cobra-cli add addUser 是有效的。

运行这三个命令后,您将拥有一个类似以下结构的应用程序:

  ▾ app/
    ▾ cmd/
        config.go
        create.go
        serve.go
        root.go
      main.go

此时,您可以运行 go run main.go 来运行您的应用程序。go run main.go servego run main.go configgo run main.go config create 以及 go run main.go help serve 等都可以工作。

现在,您已经有一个基于 Cobra 的应用程序运行起来了。下一步是编辑 cmd 目录中的文件,并根据您的应用程序进行自定义。

有关使用 Cobra 库的完整详细信息,请阅读 Cobra 用户指南

玩得开心!

配置 Cobra 生成器

如果您提供一个简单的配置文件,那么 Cobra 生成器将更容易使用,因为它可以帮助您消除重复提供的大量信息和标志。

一个示例的 ~/.cobra.yaml 文件:

author: Steve Francia <spf@spf13.com>
license: MIT
useViper: true

您还可以使用内置的许可证。例如,GPLv2GPLv3LGPLAGPLMIT2-Clause BSD3-Clause BSD

您可以通过将 license 设置为 none 来指定无许可证,或者您还可以指定自定义许可证:

author: Steve Francia <spf@spf13.com>
year: 2020
license:
  header: This file is part of CLI application foo.
  text: |
    {{ .copyright }}

    This is my license. There are many like it, but this one is mine.
    My license is my best friend. It is my life. I must master it as I must
    master my life.

在上面的自定义许可证配置中,许可证文本中的 copyright 行是从 authoryear 属性生成的。LICENSE 文件的内容如下:

Copyright © 2020 Steve Francia <spf@spf13.com>

This is my license. There are many like it, but this one is mine.
My license is my best friend. It is my life. I must master it as I must
master my life.

header 属性用作许可证文件的头部。不进行任何插值。这是用作 Go 文件头部的示例。

/*
Copyright © 2020 Steve Francia <spf@spf13.com>
This file is part of CLI application foo.
*/