flag包的使用详解

go语言提供的flag包可以解析命令行的参数,而且使用起来非常的方便。
先看一个小例子:
pro02_4.go

  1. package main
  2. import (
  3. "flag"
  4. "fmt"
  5. )
  6. var bFlag = flag.Bool("b", false, "If show message")
  7. func main() {
  8. //第一个参数,为参数名称,第二个参数为默认值,第三个参数是说明
  9. name := flag.String("name", "Watson", "Input your name.")
  10. age := flag.Int("age", 0, "Input your age.")
  11. flag.Parse()
  12. if !*bFlag {
  13. fmt.Println("Mr. Watson, Come Here, I Want You!")
  14. } else {
  15. fmt.Println("Hello, ", *name, " age:", *age)
  16. }
  17. }

运行结果

在命令行输入go build pro02_4.go
然后执行 pro02_4.exe (Linux,MACos 执行./pro02_4 本书余下部分基本都以windows为例,就不再说明了)

显示结果
显示结果1

pro02_4.exe -b=true
显示结果2

pro02_4.exe -b=true -name=sunny -age=18

或者

pro02_4.exe -b=true -name sunny -age 18

结果都是
显示结果3

不过要是换成 pro02_4.exe -b false
显示结果就可能不确定了,在我电脑上显示的是
![显示结果4]https://github.com/sunnygocms/gobook/blob/master/go_lang_base/02.4.4.png)

大家可能都会误以为是显示
显示结果1

几点注意事项:

1,通过flag.String(), flag.Bool, flag.Int(),flag.IntVar()等方式来定义命令行中需要使用的flag。

2,在定义完flag后,通过调用flag.Parse()来进行对命令行参数的解析。

3,命令行参数的格式可以是:

-flag xxx (使用空格,一个 - 符号)

—flag xxx (使用空格,两个 - 符号)

-flag=xxx (使用等号,一个 - 符号)

—flag=xxx (使用等号,两个 - 符号)

其中,布尔类型的参数比较特殊,为了防止解析时的二义性,应该使用等号的方式指定。

4,命令行后面直接跟-help 、—help 或者是输入错误的参数就会把帮助文档显示出来,以上面的程序为例。
help