Cobra

Cobra简介

Cobra 是一个用于生成命令行工具的框架,非常简单、易用,kubernetes/docker/hugo/etcd等都是使用Cobra开发的命令行工具。

Cobra安装

  • go get -u github.com/spf13/cobra@latest - 安装项目内使用的 Cobra
  • go get -u github.com/spf13/cobra-cli@latest - 安装 Cobra 命令行工具
  • import 'github.com/spf13/cobra' - 项目内使用

cobra-cli命令介绍

cobra-cli add [command name] - 为应用添加一个命令

cobra-cli init [path] [flag] - 使用cobra初始化一个新的应用

  • -a —author - 设置版权信息的作者名,默认为 YOUR NAME
  • --config - 设置邮箱等其他配置,存储在 $HOME/.cobra.yaml
  • -l --license - 设置项目使用的开源协议
  • --viper - 使用Viper加载config
  • 新版本已经取消掉 --pkg-name 参数,取代的是 path 地址,如果输入 path 地址,则会在当前所在的目录下创建一个 path 地址,并初始化为 Cobra 模式的项目
  • -h --help - 查看 cobra-cli init 的帮助

Cobra项目创建

初始化一个cobra项目,必须在go module的目录下执行,示例中创建一个 clid 项目

  • mkdir clid
  • cd clid
  • go mod init clid
  • cobra-cli init -a stolen -l MIT --viper

cobra初始化后的目录结构如下

1
2
3
4
5
6
7
.
├── LICENSE
├── cmd
│ └── root.go
├── go.mod
├── go.sum
└── main.go

修改作者信息

建议初始化就修改好作者的信息,否则修改会比较麻烦

1
cobra-cli init --author stolen

新增命令

会在cmd目录下创建一个新文件

1
cobra-cli add version

命令编译与运行

  • go build - 编译命令
  • clid - 运行命令

为命令添加一个子命令

cobra-cli add [command name] - 为应用添加一个命令

  • cobra-cli add version - 为应用添加一个 version 命令
  1. 命令的基本结构

    • short - 显示父级命令帮助时,对该命令的简介
    • long - 显示当前命令帮助是显示的内容
    • run - 运行执行的操作
  2. 将命令绑定到父命令上的方法

    1
    rootCmd.AddCommand(versionCmd)

为命令添加一个选项

1
2
3
4
func init()
rootCmd.AddCommand(versionCmd)
versionCmd.Flags().StringP("author", "a", "stolen", "input author")

使用命令

1
2
3
4
5
6
7
8
9
10
11
12
var versionCmd = &cobra.Command{
Use: "version",
Short: "获取版本信息",
Long: `获取版本信息,包括版本号,构建时间,构建人等信息`,
Run: func(cmd *cobra.Command, args []string) {
author, err := cmd.Flags().GetString("author")
if err != nil {
fmt.Println(err)
}
fmt.Printf("version called, author: %s\n", author)
},
}