cobra简介
Cobra 是一个非常实用(流行)的golang包,很多优秀的开源应用都在使用它,包括 Docker 和 Kubernetes 等,它提供了简单的接口来创建命令行程序。同时,Cobra 也是一个应用程序,用来生成应用框架,从而开发以 Cobra 为基础的应用。
主要功能
- 简易的子命令行模式,如 app server, app fetch 等等
- 完全兼容 posix 命令行模式
- 嵌套子命令 subcommand
- 支持全局,局部,串联 flags
- 使用 cobra 很容易的生成应用程序和命令,使用 cobra create - appname 和 cobra add cmdname
- 如果命令输入错误,将提供智能建议,如 app srver,将提示 srver 没有,是不是 app server
- 自动生成 commands 和 flags 的帮助信息
- 自动生成详细的 help 信息,如 app help
- 自动识别帮助 flag -h,--help
- 自动生成应用程序在 bash 下命令自动完成功能
- 自动生成应用程序的 man 手册
- 命令行别名
- 自定义 help 和 usage 信息
- 可选的与 viper apps 的紧密集成
创建 cobra 应用
1.安装 cobra 包
$ go get -u github.com/spf13/cobra/cobra
2.用cobra生成应用程序框架
$ cobra init projpath --pkg-name appname
3.用cobra生成命令代码
$ cd projpath
$ cobra add cmd_1
$ cobra add cmd_2
4.用cobra为命令添加选项(flags)
选项(flags)用来控制cmd的具体行为。根据选项作用范围,分为persistent和local.
对于 persistent 类型的选项,既可以设置给该 Command,又可以设置给该 Command 的子 Command。对于一些全局性的选项,比较适合设置为 persistent 类型,local 类型的选项只能设置给指定的 Command。
var Verbose bool
rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output")
var Source string
rootCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from")
5.用cobra为命令添加参数(arguments)
cobra 默认提供了一些验证方法:
- NoArgs - 如果存在任何位置参数,该命令将报错
- ArbitraryArgs - 该命令会接受任何位置参数
- OnlyValidArgs - 如果有任何位置参数不在命令的 ValidArgs 字段中,该命令将报错
- MinimumNArgs(int) - 至少要有 N 个位置参数,否则报错
- MaximumNArgs(int) - 如果位置参数超过 N 个将报错
- ExactArgs(int) - 必须有 N 个位置参数,否则报错
- ExactValidArgs(int) 必须有 N 个位置参数,且都在命令的 ValidArgs 字段中,否则报错
- RangeArgs(min, max) - 如果位置参数的个数不在区间 min 和 max 之中,报错
var cmdTimes = &cobra.Command{
Use: …
Short: …
Long: …
Args: cobra.MinimumNArgs(1),
Run: …
}
有疑问加站长微信联系(非本文作者)