flag
包实现了命令行标志解析。
使用 flag.String()
, Bool()
, Int()
等定义标志。
这声明了一个整数标志 -n
,存储在指针 nFlag
中,类型为 *int
:
import "flag"
var nFlag = flag.Int("n", 1234, "help message for flag n")
如果您愿意,您可以使用 Var()
函数将标志绑定到一个变量。
var flagvar int
func init() {
flag.IntVar(&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
// 仅非布尔标志
可以使用一个或两个破折号;它们是等效的。布尔标志不允许使用最后一种形式,因为如果有一个名为 0、false 等的文件,命令 cmd -x *
(其中 *
是一个Unix shell通配符)的含义会改变。您必须使用 -flag=false
形式来关闭一个布尔标志。
标志解析在第一个非标志参数之前停止("-" 是一个非标志参数)或在终止符 "--" 之后停止。
整数标志接受 1234
、0664
、0x1234
,并且可以是负的。布尔标志可以是:
1
, 0
, t
, f
, T
, F
, true
, false
, TRUE
, FALSE
, True
, False
持续时间标志接受任何对 time.ParseDuration
有效的输入。
默认的命令行标志集由顶级函数控制。FlagSet
类型允许定义独立的标志集,例如在命令行接口中实现子命令。FlagSet
的方法与命令行标志集的顶级函数类似。
示例
输出:[此处省略了示例输出]
标签:标志,flagvar,用法,flag,命令行,使用,Go,解析 From: https://www.cnblogs.com/tangjicheng/p/17627879.html