美文网首页Go
Golang之实用的命令行工具包cobra

Golang之实用的命令行工具包cobra

作者: 炎鸿 | 来源:发表于2020-06-25 00:20 被阅读0次

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的具体行为。根据选项作用范围,分为persistentlocal.
对于 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: …
}

相关文章

网友评论

    本文标题:Golang之实用的命令行工具包cobra

    本文链接:https://www.haomeiwen.com/subject/uqdjfktx.html