import "flag"
flag包实现了命令行参数的解析。
要求:
使用flag.String(), Bool(), Int()等函数注册flag.
常用的flag注册方式
1、下例声明了一个整数flag,解析结果保存在*int指针ip里:
import "flag"
var ip = flag.Int("flagname", 1234, "help message for flagname")
# flagname是参数名称,1234是参数默认值,"xxx"是参数含义描述
2、也可以将flag绑定到一个变量,使用Var系列函数:
var flagvar int
func init() {
flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}
3、或者你可以自定义一个用于flag的类型(满足Value接口)并将该类型用于flag解析,如下:
flag.Var(&flagVal, "name", "help message for flagname")
对这种flag,默认值就是该变量的初始值。
解析
在所有flag都注册之后,调用:
flag.Parse()
来解析命令行参数写入注册的flag里。
结果
解析之后,flag的值可以直接使用。如果你使用的是flag自身,它们是指针;如果你绑定到了某个变量,它们是值。
fmt.Println("ip has value ", *ip)
fmt.Println("flagvar has value ", flagvar)
解析后,flag后面的参数可以从flag.Args()里获取或用flag.Arg(i)单独获取。这些参数的索引为从0到flag.NArg()-1。
语法
命令行flag语法:
-flag
-flag=x
-flag x // 只有非bool类型的flag可以
可以使用1个或2个’-'号,效果是一样的。最后一种格式不能用于bool类型的flag,因为如果有文件名为0、false等时,如下命令:
cmd -x *
其含义会改变。你必须使用-flag=false格式来关闭一个bool类型flag。
Flag解析在第一个非flag参数(单个"-“不是flag参数)之前停止,或者在终止符”–"之后停止。
整数flag接受1234、0664、0x1234等类型,也可以是负数。bool类型flag可以是:
1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False
时间段flag接受任何合法的可提供给time.ParseDuration的输入。