命令行工具
原生flag包
Go原生在flag包提供了一个命令行工具类,它可以让我们执行类似命令行的赋参操作,经常被运用于工具类,特别是数据处理过程,可以方便我们进行参数可视化注解。
flag包提供了多个常用类型的赋值方法,如String, Int, Bool, Float64, Duration
等。
- 通过flag.XXXType()函数可以对参数名称,默认值,描述进行定义
flag.parse()
用于指定程序开始解析传入的命令行变量- 参数-h可以调用flag内置的
usage()
方法, 把参数描述打印出来
下面列举一个简单的例子。
用法示例:
func main() {
//声明接收变量, 注意返回的是个指针类型
wordParam := flag.String("word", "defaultValue", "Desc param 1 for something.")
numParam := flag.Int("number", 0, "Desc param 2 for integer number.")
//an existing var declared elsewhere in the program
ok := AllRight()
flag.BoolVar(&ok, "ok", false, "Desc value for boolean.")
flag.Parse()
log.Printf("Flag for wordParam: %s", *wordParam)
log.Printf("Flag for wordParam: %d", *numParam)
log.Printf("Flag for inner bool value : %v", ok)
}
func AllRight() bool {
return true
}
我们通过command line 传参给可执行程序,输出:
$ ./tool.exe -word=hello -number=6
2020/03/18 10:59:49 Flag for wordParam: hello
2020/03/18 10:59:49 Flag for wordParam: 6
2020/03/18 10:59:49 Flag for inner bool value : false
如果使用-h/--help
命令可以调出参数提示,输出:
$ ./tool.exe -h
Usage of E:\Code\GoWork\src\HelloGo\basic\flag\tool.exe:
-number int
Desc param 2 for integer number.
-ok
Desc value for boolean.
-word string
Desc param 1 for something. (default "defaultValue")
flag分级用法
在实际应用环境,调用目标可能有多个,有时我们需要多个命令,多个参数联合起来,用于调用不同的方法,类似于参数调用子命令的参数,
如:./cmd foo -a="a" -b=1
或者./cmd bar -c="c" -d=2
Subcommands
原生flag包提供了一个子命令构造方式,NewFlagSet
用于返回子命令的flag,示例如下:
我们定义一个解析子命令方法:
func SubCommands() {
//param1: 命令参数, param2: 错误退出码
fooCmd := flag.