golang-flag包文档翻译
flag包实现了命令行参数解析。
代码中仅对注释进行翻译。
使用
使用flag.String()
、flag.Bool()
、flag.Int()
等函数声明命令行参数。
如下示例声明了一个整型参数-flagname
,并将信息存储在了指针ip
中,类型为*int
。
import "flag"
var ip = flag.Int("flagname", 123, "help message for flagname")
如果你喜欢,你可以使用Var()
这类函数将参数绑定到变量中。
var flagvar int
func init(){
flag.IntVat(&flagvar, "flagname", 1234, "help message for flagname")
}
你也可以创建一个实现了Value接口(指针接收器)的参数,然后绑定在一起,示例如下
flag.Var(&flagVal, "name", "help message for flagname")
对于这类参数,数据的默认值将会是数据的初始化数据。
在所有参数声明后,调用flag.Parse()
方法,根据已经声明的参数进行解析。
参数在被解析之后可能会被直接使用,如是使用参数本身,则参数的类型为指针类型,如果是进行了变量绑定,则参数是数据值。参数绑定后,尝试以下代码。
fmt.Println("ip has value ", *ip)
fmt.Println("flagvar has value ", flagvar)
解析之后,标记后面的参数可以用作切片flag.Args()
或单独用作flag.Arg(i)
。
参数的下标范围:0-flag.Narg()-1
命令行语法
flag
可以解析以下格式的参数
-flag
-flag=x
-
flag x
(不支持布尔类型)
可以使用一个或两个-
,-x
与--x
是等效的。最后一种格式不支持布尔类型,因为cmd -x *
中的*
是Unix shell通配符的命令的含义,如果存在名为0,false等的文件,则该命令的含义将发生变化。必须使用-a=false
形式来关闭a布尔标志。
标志解析在第一个非标志参数(-
是非标志参数)之前或终止符--
之后停止。
整型参数接受1234
, 0664
, 0x1234
与负数。
布尔类型参数接受1
, 0
, t
, f
, T
, F
, true
, false
, TRUE
, FALSE
, True
, False
持续时间参数接受任何对time.ParseDuration有效的输入。
命令行参数的默认集合(FlagSet
)由顶级函数控制。FlagSet
类型允许人们定义独立的标志集,例如在命令行界面中实现子命令。FlagSet的方法类似于命令行标志集的顶级功能。
有疑问加站长微信联系(非本文作者)