美文网首页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