Go内置库模块 flag
import "flag"
flag包实现了命令行参数的解析。每个参数认为一条记录,根据实际进行定义,到一个set集合。每条都有各自的状态参数。
在使用flag时正常流程:
1. 通过flag.String(), flag.Bool(), flag.Int()等函数来定义命令行中需要使用的参数。
2. 在定义完flag后,通过调用flag.Parse()来进行对命令行参数的解析。
3. 获取flag.String(), flag.Bool(), flag.Int()等方法的返回值,即对应用户输入的参数.
注意的是flag.Xxx()返回的值是变量的内存地址,要获取值时要通过在变量前加*(星号)获取.
说明:像flag.Int、flag.Bool、flag.String这样的函数格式都是一样的,调用的时候需要传入3个参数
参数的说明如下:
第一个arg表示参数名称,在控制台的时候,提供给用户使用.
第二个arg表示默认值,如果用户在控制台没有给该参数赋值的话,就会使用该默认值.
第三个arg表示使用说明和描述,在控制台中输入-arg的时候会显示该说明,类似-help
可注册flag类型有:Bool / Int / Int64 / Uint / Uint64 / Float / Float64 / String / Duration / Var
type Flag
type Flag struct {Name string // flag在命令行中的名字Usage string // 帮助信息Value Value // 要设置的值DefValue string // 默认值(文本格式),用于使用信息
}
Flag类型代表一条flag的状态。
type FlagSet
type FlagSet struct {// Usage函数在解析flag出现错误时会被调用// 该字段为一个函数(而非采用方法),以便修改为自定义的错误处理函数Usage func()// 内含隐藏或非导出字段
}
FlagSet代表一个已注册的flag的集合。FlagSet零值没有名字,采用ContinueOnError错误处理策略。
func Int
func Int(name string, value int, usage string) *int
Int用指定的名称、默认值、提示信息注册一个int类型flag。返回一个保存了该flag的值的指针。
func IntVar
func IntVar(p *int, name string, value int, usage string)
IntVar用指定的名称、默认值、使用信息注册一个int类型flag,并将flag的值保存到p指向的变量。
func Parse
func Parse()
从os.Args[1:]中解析注册的flag。必须在所有flag都注册好而未访问其值时执行。未注册却使用flag -help时,会返回ErrHelp。
即:将输入的flag和注册的flag进行匹配解析
func Parsed
func Parsed() bool
返回是否Parse已经被调用过。
package mainimport ("flag""fmt"
)func main() {married := flag.Bool("married", false, "Are you married?")age := flag.Int("age", 22, "How old are you?")name := flag.String("name", "", "What your name?")var address string//flag.StringVar这样的函数第一个参数换成了变量地址,后面的参数和flag.String是一样的。flag.StringVar(&address, "address", "GuangZhou", "Where is your address?")flag.Parse() //解析输入的参数fmt.Println("输出的参数married的值是:", *married)//不加*号的话,输出的是内存地址fmt.Println("输出的参数age的值是:", *age)fmt.Println("输出的参数name的值是:", *name)fmt.Println("输出的参数address的值是:", address)
}
![](/assets/blank.gif)
从运行结果中可以看出,address参数我们并没有指定值,则输出的就是默认值.
另外,-arg后面的=号也不是必须的,可以用空格代替.
如果要查看该程序的所有参数的使用,可以使用-help来查看,如下:
![](/assets/blank.gif)
func PrintDefaults
func PrintDefaults()
PrintDefault会向标准错误输出写入所有注册好的flag的默认值。
func NFlag
func NFlag() int
NFlag返回已被设置的flag的数量。
func Lookup
func Lookup(name string) *Flag
返回已经已注册flag的Flag结构体指针;如果flag不存在的话,返回nil。
func NArg
func NArg() int
NArg返回解析flag之后剩余参数的个数。
func Args
func Args() []string
返回解析之后剩下的非flag参数。(不包括命令名).就是无法进行flag匹配的有哪些,
func Arg
func Arg(i int) string
返回解析之后剩下的第i个参数,从0开始索引。
func Var
func Var(value Value, name string, usage string)
Var方法使用指定的名字、使用信息注册一个flag。该flag的类型和值由第一个参数表示,该参数应实现了Value接口。例如,用户可以创建一个flag,可以用Value接口的Set方法将逗号分隔的字符串转化为字符串切片。
func Set
func Set(name, value string) error
设置已注册的flag的值,修改或者设置
func Visit
func Visit(fn func(*Flag))
按照字典顺序遍历标签,并且对每个标签调用fn。 这个函数只遍历解析时进行了设置的标签。[就是执行时提供非默认的值]
func VisitAll
func VisitAll(fn func(*Flag))
按照字典顺序遍历标签,并且对每个标签调用fn。 这个函数会遍历所有标签,不管解析时有无进行设置。
package mainimport ("flag""fmt"
)func main() {// golang的flag包的一些基本使用方法// 待使用的变量var id intvar name stringvar male bool// 是否已经解析fmt.Println("parsed? = ", flag.Parsed())// 设置flag参数 (变量指针,参数名,默认值,帮助信息)// 也可以用以下带返回值的方法代替,不过他们返回的是指针,比较麻烦点// Int(name string, value int, usage string) *int// String(name string, value string, usage string) *string// Bool(name string, value bool, usage string) *boolflag.IntVar(&id, "id", 123, "help msg for id")flag.StringVar(&name, "name", "default name", "help msg for name")flag.BoolVar(&male, "male", false, "help msg for male")// 解析flag.Parse()// 是否已经解析fmt.Println("parsed? = ", flag.Parsed())//// 获取非flag参数fmt.Println(flag.NArg())fmt.Println("------ Args start ------")fmt.Println(flag.Args())for i, v := range flag.Args() {fmt.Printf("arg[%d] = (%s).\n", i, v)}fmt.Println("------ Args end ------")//// visit只包含已经设置了的flagfmt.Println("------ visit flag start ------")flag.Visit(func(f *flag.Flag) {fmt.Println(f.Name, f.Value, f.Usage, f.DefValue)})fmt.Println("------ visit flag end ------")//// visitAll只包含所有的flag(包括未设置的)fmt.Println("------ visitAll flag start ------")flag.VisitAll(func(f *flag.Flag) {fmt.Println(f.Name, f.Value, f.Usage, f.DefValue)})fmt.Println("------ visitAll flag end ------")//// flag参数fmt.Printf("id = %d\n", id)fmt.Printf("name = %s\n", name)fmt.Printf("male = %t\n", male)// flag参数默认值fmt.Println("------ PrintDefaults start ------")flag.PrintDefaults()fmt.Println("------ PrintDefaults end ------")//非flag参数个数fmt.Printf("NArg = %d\n", flag.NArg())// 已设置的flag参数个数fmt.Printf("NFlag = %d\n", flag.NFlag())
}
# go run demo2_flag.go -id 234 -name "xx" -male=true p1 p2 p3
parsed? = false
parsed? = true
3
------ Args start ------
[p1 p2 p3]
arg[0] = (p1).
arg[1] = (p2).
arg[2] = (p3).
------ Args end ------
------ visit flag start ------
id 234 help msg for id 123
male true help msg for male false
name xx help msg for name default name
------ visit flag end ------
------ visitAll flag start ------
id 234 help msg for id 123
male true help msg for male false
name xx help msg for name default name
------ visitAll flag end ------
id = 234
name = xx
male = true
------ PrintDefaults start -------id inthelp msg for id (default 123)-malehelp msg for male-name stringhelp msg for name (default "default name")
------ PrintDefaults end ------
NArg = 3
NFlag = 3
在flag包中,进行了进一步封装:将FlagSet的方法都重新定义了一遍,也就是提供了一序列函数,而函数中只是简单的调用已经实例化好了的FlagSet
Go内置库模块 flag相关推荐
- python生成50个随机数_Python内置random模块生成随机数的方法
本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...
- python产生随机数random.random_Python内置random模块生成随机数的方法
本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...
- python中的random模块_Python内置random模块生成随机数的方法
本文我们详细地介绍下两个模块关于生成随机序列的其他使用方法. 随机数参与的应用场景大家一定不会陌生,比如密码加盐时会在原密码上关联一串随机数,蒙特卡洛算法会通过随机数采样等等.Python内置的ran ...
- python内置库有哪些_python 内置库
广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! version: 0. 2.0, configurations: }, de ...
- python内置库之学习configparser库(一)
python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...
- 使用Go内置库实现简易httpbin功能
简介 通过学习「Go语言圣经」的入门部分,了解到 go 内置库里提供了一个简单的 http 功能.于是想模拟下httpbin[1]的 get 方法显示 header 头信息的功能来练手. 本人 Go ...
- python中json模块_Python使用内置json模块解析json格式数据的方法
本文实例讲述了Python使用内置json模块解析json格式数据的方法.分享给大家供大家参考,具体如下: Python中解析json字符串非常简单,直接用内置的json模块就可以,不需要安装额外的模 ...
- python内置collections模块的使用
python内置collections模块的使用 文章目录: 一.collections模块说明 1.查看collections模块的定义路径 2.查看collections文档介绍信息 3.查看co ...
- random输出1到10之间_第43P,随机数,Python内置库之random
大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第43篇文章,第二阶段的课程:Python基础知识:Python内置库之random随机库. 学习本课程,建议先看一遍:[计算机基础 ...
最新文章
- 【Linux】Linux添加系统调用以及内核编译过程
- http 三种认证方式 Basic Session Token 简介
- Spring Security入门(3-4)Spring Security 异常处理、异常传递和异常获取
- 信息学奥赛一本通(1072:鸡尾酒疗法)
- oracle daga备份,敏捷的Oracle 10g MAA配置方法
- oracle12c备份和恢复,Oracle12c数据的逻辑备份与恢复
- 浅谈非法NAT接入对网络的安全风险
- uva 11892 - ENimEN(推理)
- 一个比CAM350好用的看GERBER软件
- matlab 各类符号意义
- 水量调节大师外挂___安卓版
- 24岁华为Java程序员工资表曝光,牛逼的人注定会牛逼
- 如何卸载Oracle数据库
- 【MFC】CSplitterWnd 重载限定窗口调整范围
- 服务器上安装anaconda3
- 校园导游咨询系统(数据结构课程设计)
- [转]IE6下的CSS BUG枚举
- cubemx 配置sd卡 读写测试程序
- java gui pdf_java gui 程序设计基础.pdf
- 用Kotlin写android点击事件
热门文章
- C++正整数的素数分解的实现算法(附完整源码)
- C++实现hopcroft karp霍普克洛夫特-卡普算法(附完整源码)
- QT自定义图表上不同元素的外观
- 当代最值得收藏的画家作品_欣赏当代知名画家谭日群——国画人物画书法作品欣赏...
- 二十种实战调优MySQL性能优化的经验(转自公众号:架构之家 2018-05-08)
- 1.多彩的幕布CCLayerColor,CCLayerGradient
- Java代码书写规范
- plsql 中的记录型变量和引用型变量
- Mysql 8 密码策略之组件方式及ERROR 1819
- jquery ajax 找到数据怎样放到下拉框里_闲话Excel之简易数据动态图表的制作