使用这个cobra这个库。
cobra 中有个重要的概念,分别是:
执行命令行程序时的一般格式为:
APPNAME COMMAND ARG --FLAG
首先来搞清楚命令行参数(arguments)与命令行选项的区别(flags/options)。
以常见的 ls
命令来说,其命令行的格式为:
ls [OPTION]... [FILE]…
# OPTION 对应本文中介绍的 flags,以 - 或 -- 开头
# FILE 则被称为参数(arguments)或位置参数
一般的规则是参数在所有选项的后面,上面的 … 表示可以指定多个选项和多个参数。
cobra 默认提供了一些验证方法:
比如要让 Command cmdTimes 至少有一个位置参数,可以这样初始化它:
var cmdTimes = &cobra.Command{
Use: …
Short: …
Long: …
Args: cobra.MinimumNArgs(1),
Run: …
}
选项(flags)用来控制 Command 的具体行为。根据选项的作用范围,可以把选项分为两类:
对于 persistent 类型的选项,既可以设置给该 Command,又可以设置给该 Command 的子 Command。对于一些全局性的选项,比较适合设置为 persistent 类型,比如控制输出的 verbose 选项:
var Verbose bool
rootCmd.PersistentFlags().BoolVarP(&Verbose, "verbose", "v", false, "verbose output")
local 类型的选项只能设置给指定的 Command,比如下面定义的 source 选项:
var Source string
rootCmd.Flags().StringVarP(&Source, "source", "s", "", "Source directory to read from")
// 该选项不能指定给 rootCmd 之外的其它 Command。
默认情况下的选项都是可选的,但一些用例要求用户必须设置某些选项,这种情况 cobra 也是支持的,通过 Command 的 MarkFlagRequired
方法标记该选项即可:
var Name string
rootCmd.Flags().StringVarP(&Name, "name", "n", "", "user name (required)")
rootCmd.MarkFlagRequired("name")