GO语言flag参数解析

版权声明:http://www.sunansheng.com/ https://blog.csdn.net/sunansheng/article/details/74989868

import "flag"

flag包实现了命令行参数的解析。

要求:

使用flag.String(), Bool(), Int()等函数注册flag,下例声明了一个整数flag,解析结果保存在*int指针ip里:

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

如果你喜欢,也可以将flag绑定到一个变量,使用Var系列函数:

var flagvar int
func init() {
    flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
}

或者你可以自定义一个用于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的输入。

默认的命令行flag集被包水平的函数控制。FlagSet类型允许程序员定义独立的flag集,例如实现命令行界面下的子命令。FlagSet的方法和包水平的函数是非常类似的。

阅读更多 登录后自动展开
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页