gcmd
gcmd
模块提供了对命令行参数、选项的读取功能,以及对应参数的回调函数绑定功能。
...
主要方法介绍: 1. 模块方法 - GetArg*
方法用以获取默认解析的命令行参数,参数通过输入索引位置获取,索引位置从0
开始,但往往我们需要获取的参数是从1
开始,因为索引0
的参数是程序名称; - GetOpt*
方法用以获取默认解析的命令行选项,选项通过名称获取,并且选项的输入没有顺序性,可以输入到任意的命令行位置; - Scan*
方法用户交互式命令中,输入可选择的提示信息,并获取用户输入的参数信息返回; 1. 参数解析 - Parse*
方法用以给定解析规则解析命令行参数,解析规则是一个map
参数,用以指定需要解析的选项信息,并且指定选项是否需要读取数值; - 其他方法的作用同模块方法;
Parse
自定义解析
大多数场景中我们需要自定义参数解析。其实参数解析最主要的是针对于选项的解析,因此Parse*
方法的输入参数需要指定的是选项的解析配置,包括有哪些选项名称,每个选项是否带有数值。根据这一配置便可将所有的参数和选项进行解析归类。
...
而键值是一个布尔类型,标识该选项是否需要解析参数。这一选项配置是非常重要的,因为有的选项是不需要获得数据的,仅仅作为一个标识。例如,-f force
这个输入,在需要解析数据的情况下,选项f
的值为force
;而在不需要解析选项数据的情况下,其中的force
便是命令行的一个参数,而不是选项。
选项位置与=
符号
之前提到过,选项的位置在命令行中是任意的,也就是说,以下命令行选项输入其实意义是一样的:
...
gf build main.go -a=amd64 -o=linux -n=app
默认命令行解析规则
由于gcmd
模块提供了一些包方法用以获取默认的命令行解析规则。在默认规则下,选项名称与数据之间应当使用=
连接(不支持空格),没有=
符号的选项表示无数据选项。例如,
...
那么,gf
/build
/main.go
/amd64
/linux
/app
将会被解析为参数,索引为 0
到5
;而a
/o
/n
/f
将会被解析为无数据选项。
回调函数绑定
对于命令行的可执行程序来讲,需要根据执行参选定位到对应的入口函数进行处理,gcmd
模块提供了以下方法来实现:
...
$ go build main.go
$ ./main test
This is test.
$ ./main help
This is help.
$ ./main
$
更多的实战示例
由于gf
的命令行工具中大量使用了gcmd
模块,因此该示例非常丰富,具体请参考源码:https://github.com/gogf/gf-cli