命令行启动服务的方式,在后端使用很是普遍,若是有写过C语言的同窗相信不难理解这一点!在C语言中,咱们能够根据argc和argv来获取和解析命令行的参数,从而经过不一样的参数调取不一样的方法,同时也能够用Usage来打印帮助信息了。golang
那么开始今天的话题以前,咱们回顾一下在C语言中是如何解析传递的参数的。后端
示例代码:数组
编译运行:bash
看完上面的例子,其实咱们能够发现,上例中是C语言自带的参数解析,对于简单的参数构成仍是可使用的。下面咱们再看一下Go语言os标准库的实现。app
示例代码:tcp
编译执行:ide
上例中,咱们能够看到os.Args返回一个数组,数组里面是咱们命令行执行时,所传递的参数和程序名称。os自带的参数获取,对于简单的参数来讲还能使用,若是参数复杂的状况下,那么解析起来就比较费劲的。这个时候,咱们能够选择Go语言的flag标准库来帮咱们处理命令行解析工做。函数
Flag包:https://golang.org/pkg/flag/工具
是Go语言提供的一个标准库,可以较为方便和灵活的解析命令行传递的参数。ui
flag有两种方式:
一、flag.Type,其中Type能够是:int、string、bool,float等类型,返回指针类型。
参数1:flag的名称
参数2:flag的值,上例中默认值是0
参数3:flag的描述
二、flag.TypeVar,将类型绑定到一个变量上。
参数1:flag的值
参数2:flag的名称
参数3:flag的值,上例中默认值是0
参数4:flag的描述
示例代码:
运行结果:
查看帮助:
Flag语法:
Flag解析:
parseOne()函数来处理-flag=value的,若是处理成功后,会将flag存储到FlagSet.actucal map[string]*Flag中。
flag.Parse()函数来解析命令行中的参数中定义的flag,该方法遇到第一个非flag的命令方法就停止。
一、non-flag的时候,会终止解析工做。
二、连续两个“-”的时候,会终止解析工做。
而后,再看咱们传递错误的参数的返回状况。
跟踪到代码中能够看到如图:
从上例可见,其实flag并无很是强大,下一章节会介绍一个更强大的命令行解析工具。
总结: