golang flag 介绍和使用

发布于 2024-10-20 08:59:04 字数 1945 浏览 34 评论 0

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

-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 绑定到一个变量上,如:

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:

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

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

解析

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

flag 其他函数

获取非 flag 参数

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

visit 只包含已经设置了的 flag

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

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

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

})

flag 参数默认值

fmt.Println("------ PrintDefaults start ------")
flag.PrintDefaults()
fmt.Println("------ PrintDefaults end ------")

是否已经解析

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

情归归情

暂无简介

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文