Go语言flag包解析
Go语言中的 flag 包中,提供了命令行参数解析的功能。
有关命令行参数概念
- 命令行参数(或参数):是指运行程序时提供的参数;
- 已定义命令行参数:是指程序中通过 flag.Type 这种形式定义了的参数;
- 非 flag(non-flag)命令行参数(或保留的命令行参数):可以简单理解为 flag 包不能解析的参数。
flag包使用
flag.Type()
flag.Type(flag 名, 默认值, 帮助信息) *Type
示例代码
package mainimport ("flag""fmt"
)func main() {// 返回的name,age,married,delay等为对应类型的指针name := flag.String("name", "张三", "姓名")age := flag.Int("age", 18, "年龄")married := flag.Bool("married", false, "婚否")delay := flag.Duration("d", 0, "时间间隔")// 设置好之后命令解析flag.Parse()// 返回的是指针,访问需使用*fmt.Println(*name, *age, *married, *delay)
}
运行结果(可以看到没有赋值的地方采用我们之前的默认值)
go run main.go -name="syz" -age=20 -d=0
syz 20 false 0s
如果输入错误,会有提示信息usage
go run main.go -name="尚益州" -age=20 -d=1
invalid value "1" for flag -d: parse error-age int年龄 (default 18) -d duration时间间隔-married婚否-name string姓名 (default "张三")
exit status 2
可以看到提示哪个参数输入错误,也可以看到之前输入的参数的值和类型,输入的参数是否是默认参数。
支持的命令行参数格式有以下几种:
-flag
:只支持 bool 类型;-flag=x
:支持所有类型-flag x
:只支持非 bool 类型。
flag.TypeVar()
flag.TypeVar(Type 指针, flag 名, 默认值, 帮助信息)
实例代码
package mainimport ("flag""fmt"
)func main() {// 定义命令行参数var name stringvar age intvar married bool// 使用 flag.TypeVar 方法flag.StringVar(&name, "name", "张三", "名字信息")flag.IntVar(&age, "age", 0, "年龄信息")flag.BoolVar(&married, "married", false, "婚恋情况")// 命令行参数解析flag.Parse()// 返回的是指针,访问需使用*fmt.Println(name, age, married) // 李四 18 false
}
go run main.go -name="李四" -age=18 -married=false
李四 18 false
其他函数
flag.Args() //返回命令行参数后的其他参数,以[]string类型
flag.NArg() //返回命令行参数后的其他参数个数
flag.NFlag() //返回使用的命令行参数个数
实例代码
package mainimport ("flag""fmt"
)func main() {// 定义命令行参数var name stringvar age intvar married bool// 使用 flag.TypeVar 方法flag.StringVar(&name, "name", "张三", "名字信息")flag.IntVar(&age, "age", 0, "年龄信息")flag.BoolVar(&married, "married", false, "婚恋情况")// 命令行参数解析flag.Parse()// 返回的是指针,访问需使用*fmt.Println(name, age, married) // 李四 18 falsefmt.Println("the number of used args is ", flag.NFlag()) // 返回使用的命令行参数个数fmt.Println("the number of other args ", flag.NArg()) // 返回命令行参数后的其他参数个数fmt.Println("the number of other args ", flag.Args()) // 返回命令行参数后的其他参数,以[]string类型
}
go run main.go -name="李四" -age=18 -married=false hello world
李四 18 false
the number of used args is 3
the number of other args 2
the number of other args [hello world]
参考
Go语言flag包:命令行参数解析 (biancheng.net)
Go语言flag包解析相关推荐
- 使用Golang flag包解析字符串
本篇文章主要介绍如何使用flag包解析字符串,没有介绍flag包的详细使用,需要学习flag包如何使用的同学可以参考如下这篇文章: Go语言中使用flag包对命令行进行参数解析的方法 https:// ...
- : error c2062: 意外的类型“int”_Go 命令行解析 flag 包之扩展新类型
上篇文章 说到,除布尔类型 Flag,flag 支持的还有整型(int.int64.uint.uint64).浮点型(float64).字符串(string)和时长(duration). flag 内 ...
- Go 的 flag 包可以解析命令行的参数
Go 的 flag 包可以解析命令行的参数. 一.命令行语法 命令行语法主要有以下几种形式: cmd -flag // 只支持bool类型 cmd -flag=xxx cmd -flag ...
- golang flag包(命令行参数解析)
1.1 使用示例: 我们以 nginx 为例,执行 nginx -h,输出如下: nginx version: nginx/1.10.0 Usage: nginx [-?hvVtTq] [-s sig ...
- java 解析数据包_一种基于Java语言的网络通讯数据包解析方法与流程
本发明涉及网络通讯领域,特别涉及一种基于Java语言的网络通讯数据包解析方法. 背景技术: 计算机系统和网络的大量普及使用使全球跨入了信息化时代.但是,正由于现代社会中几乎一切都在"计算机化 ...
- 从源码的角度看Go语言flag库如何解析命令行参数!
我上周五喝酒喝到晚上3点多,确实有点罩不住啊,整个周末都在休息和睡觉,文章鸽了几天,想不到就有两个人跑了. 不得不感叹一下,自媒体的太残酷了,时效就那么几天,断更就没人爱.你们说好了爱我的,爱呢?哼 ...
- Go Flag包使用及解析
https://developer.51cto.com/art/202102/647435.htm flag.Type()返回指针,所以取值要拿指针取 flag.TypeVar()没有返回值,只会在命 ...
- Go语言写的解析器(支持json,linq,sql,net,http等)
Monkey程序语言 Monkey v2.0版本已发布. monkey v2.0 增加了如下内容: 新增 short arrow(->)支持(类似C#的lambda表达式) 增加 列表推导和哈希 ...
- Go语言 命令行解析(一)
命令行启动服务的方式,在后端使用非常广泛,如果有写过C语言的同学相信不难理解这一点!在C语言中,我们可以根据argc和argv来获取和解析命令行的参数,从而通过不同的参数调取不同的方法,同时也可以用U ...
最新文章
- div中定义局部变量_说说 Go 中的变量(附粗制滥造面试题)
- 暑期应用开发怎么玩?申请蓝牙Mesh网关操控家里的一切
- crontab -e 报错(E518: Unknown option: foldenable)
- wps里为什么没有华文楷体_【上寮金贝幼儿园父母课堂】“为什么老师发的照片里没有我家孩子?”...
- 知乎启动首部科幻剧《寒梅工程2021》 概念片首次曝光
- 百度终于对知乎下手了:将以小程序接入百度App
- 巧用Notepad++代码粘贴功能
- arraylist线程安全吗_Java中的List你真的会用吗?不会用的话请收藏我的这篇文章...
- MyBatis的XML配置文件(一)
- micropython入门指南pdf_一文了解MicroPython
- vi 和 vim 的区别
- 尚学堂百战程序员--第四章
- ABBYY FineReader15老牌ocr文字识别软件
- 汉语语言分析(2) - 短语
- stm32f4有重映射么_STM32单片机重映射USART设计
- Java正则表达式的使用
- 目前中国ib学校有多少所?
- 超实用工具:获取法定节假日、休息日、周末天数
- 如何将计算机基础拷到u盘上,怎么把电脑上的CAD拷贝到u盘里
- MMU and MPU