golang命令行参数解析-flag | KaiQ.Gu|KerwinKoo Blog

JerryXia 发表于 , 阅读 (0)

golang flag

flag是标准库中实现的命令行工具,可支持命令行参数格式如下:

1
2
3
4
-flag xxx (使用空格,一个 - 符号)
--flag xxx (使用空格,两个 - 符号)
-flag=xxx (使用等号,一个 - 符号)
--flag=xxx (使用等号,两个 - 符号)

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

用法

命令行设置

1.flag.Xxx(),其中Xxx可以是Int、String等;返回一个相应类型的指针,如:

var ip = flag.Int("age", 1234, "help message for age")

或者:flag.XxxVar(),将flag绑定到一个变量上,如:

1
2
var flagvar int
flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")

上面两种方法通用。

其中,int类型可以是十进制、十六进制、八进制甚至是负数;bool类型可以是1, 0, t, f, true, false, TRUE, FALSE, True, False。Duration可以接受任何time.ParseDuration能解析的类型

2.创建自定义flag:

1
flag.Var(&flagVal, "name", "help message for flagname")

但是这种没有提供默认值,所以默认值就是golang规定的类型零值。

解析

在所有的flag定义完成之后,可以通过调用flag.Parse()进行解析。

flag其他函数

获取非flag参数

1
2
3
4
fmt.Println("------ Args start ------")
for i, v := range flag.Args() {
fmt.Printf("arg[%d] = (%s).\n", i, v)
}

visit只包含已经设置了的flag

1
2
3
4
fmt.Println("------ visit flag start ------")
flag.Visit(func(f *flag.Flag) {
fmt.Println(f.Name, f.Value, f.Usage, f.DefValue)
})

visitAll只包含所有的flag(包括未设置的)

1
2
3
4
5
fmt.Println("------ visitAll flag start ------")
flag.VisitAll(func(f *flag.Flag) {
fmt.Println(f.Name, f.Value, f.Usage, f.DefValue)

})

flag参数默认值

1
2
3
fmt.Println("------ PrintDefaults start ------")
flag.PrintDefaults()
fmt.Println("------ PrintDefaults end ------")

是否已经解析

1
fmt.Println("parsed? = ", flag.Parsed())

参考

http://qefee.com

http://blog.studygolang.com