golang flag是什么


本文摘自php中文网,作者(*-*)浩,侵删。

Golang 程序中有很多种方法来处理命令行参数。简单的情况下可以不使用任何库,直接处理 os.Args;其实 Golang 的标准库提供了 flag 包来处理命令行参数;还有第三方提供的处理命令行参数的库,比如 Pflag 等。

flag包提供了一系列解析命令行参数的功能接口 (推荐学习:go)

命令行语法

命令行语法主要有以下几种形式

1

2

3

-flag //只支持bool类型

-flag=x

-flag x //只支持非bool类型

以上语法对于一个或两个‘-’号,效果是一样的,但是要注意对于第三种情况,只支持非bool类型,原因是碰到如下情况时

1

cmd -x *

*为0,false有可能表示一个文件名或文件,也有可能表示x标签的值为0或false,会产生二义性,因此规定第三种只支持非bool类型。对于整形flag,合法的值可以为1234, 0664,0x1234或负数等。对于布尔型flag,可以为1, 0, t, f, T, F,true, false, TRUE, FALSE, True, False等

命令行参数解析方法

使用flag主要包括以下几步

定义flag参数,有三种方式

通过flag.String(), Bool(), Int() 等flag.Xxx()方法,该种方式返回一个相应的指针

1

2

import "flag"

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

通过flag.XxxVar()方法将flag绑定到一个变量,该种方式返回值类型,如

1

2

3

4

var flagvar int

func init() {

    flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")

}

通过flag.Var()绑定自定义类型,自定义类型需要实现Value接口(Receives必须为指针),如

1

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

对于这种类型的flag,默认值为该变量类型的初始值

调用flag.Parse()解析命令行参数到定义的flag

1

flag.Parse()

解析函数将会在碰到第一个非flag命令行参数时停止,非flag命令行参数是指不满足命令行语法的参数,如命令行参数为cmd --flag=true abc则第一个非flag命令行参数为“abc”

调用Parse解析后,就可以直接使用flag本身(指针类型)或者绑定的变量了(值类型)

1

2

fmt.Println("ip has value ", *ip)

fmt.Println("flagvar has value ", flagvar)

还可通过flag.Args(), flag.Arg(i)来获取非flag命令行参数

以上就是golang flag是什么的详细内容,更多文章请关注木庄网络博客!!

相关阅读 >>

golang 中const是什么

golang 写个归并排序

[译]如何避免golang的坑

golang依赖注入工具wire指南

golang实现二叉树路径遍历

golang中的defer关键字什么时候生效

golang如何定义一个二维数组

golang如何创建守护进程以及平滑重启

go 使用pprof 排查内存泄露

golang 是什么

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...