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包解析相关推荐

  1. 使用Golang flag包解析字符串

    本篇文章主要介绍如何使用flag包解析字符串,没有介绍flag包的详细使用,需要学习flag包如何使用的同学可以参考如下这篇文章: Go语言中使用flag包对命令行进行参数解析的方法 https:// ...

  2. : error c2062: 意外的类型“int”_Go 命令行解析 flag 包之扩展新类型

    上篇文章 说到,除布尔类型 Flag,flag 支持的还有整型(int.int64.uint.uint64).浮点型(float64).字符串(string)和时长(duration). flag 内 ...

  3. Go 的 flag 包可以解析命令行的参数

    Go 的 flag 包可以解析命令行的参数. 一.命令行语法 命令行语法主要有以下几种形式: cmd -flag       // 只支持bool类型 cmd -flag=xxx cmd -flag ...

  4. golang flag包(命令行参数解析)

    1.1 使用示例: 我们以 nginx 为例,执行 nginx -h,输出如下: nginx version: nginx/1.10.0 Usage: nginx [-?hvVtTq] [-s sig ...

  5. java 解析数据包_一种基于Java语言的网络通讯数据包解析方法与流程

    本发明涉及网络通讯领域,特别涉及一种基于Java语言的网络通讯数据包解析方法. 背景技术: 计算机系统和网络的大量普及使用使全球跨入了信息化时代.但是,正由于现代社会中几乎一切都在"计算机化 ...

  6. 从源码的角度看Go语言flag库如何解析命令行参数!

    我上周五喝酒喝到晚上3点多,确实有点罩不住啊,整个周末都在休息和睡觉,文章鸽了几天,想不到就有两个人跑了. 不得不感叹一下,自媒体的太残酷了,时效就那么几天,断更就没人爱.你们说好了爱我的,爱呢?哼 ...

  7. Go Flag包使用及解析

    https://developer.51cto.com/art/202102/647435.htm flag.Type()返回指针,所以取值要拿指针取 flag.TypeVar()没有返回值,只会在命 ...

  8. Go语言写的解析器(支持json,linq,sql,net,http等)

    Monkey程序语言 Monkey v2.0版本已发布. monkey v2.0 增加了如下内容: 新增 short arrow(->)支持(类似C#的lambda表达式) 增加 列表推导和哈希 ...

  9. Go语言 命令行解析(一)

    命令行启动服务的方式,在后端使用非常广泛,如果有写过C语言的同学相信不难理解这一点!在C语言中,我们可以根据argc和argv来获取和解析命令行的参数,从而通过不同的参数调取不同的方法,同时也可以用U ...

最新文章

  1. div中定义局部变量_说说 Go 中的变量(附粗制滥造面试题)
  2. 暑期应用开发怎么玩?申请蓝牙Mesh网关操控家里的一切
  3. crontab -e 报错(E518: Unknown option: foldenable)
  4. wps里为什么没有华文楷体_【上寮金贝幼儿园父母课堂】“为什么老师发的照片里没有我家孩子?”...
  5. 知乎启动首部科幻剧《寒梅工程2021》 概念片首次曝光
  6. 百度终于对知乎下手了:将以小程序接入百度App
  7. 巧用Notepad++代码粘贴功能
  8. arraylist线程安全吗_Java中的List你真的会用吗?不会用的话请收藏我的这篇文章...
  9. MyBatis的XML配置文件(一)
  10. micropython入门指南pdf_一文了解MicroPython
  11. vi 和 vim 的区别
  12. 尚学堂百战程序员--第四章
  13. ABBYY FineReader15老牌ocr文字识别软件
  14. 汉语语言分析(2) - 短语
  15. stm32f4有重映射么_STM32单片机重映射USART设计
  16. Java正则表达式的使用
  17. 目前中国ib学校有多少所?
  18. 超实用工具:获取法定节假日、休息日、周末天数
  19. 如何将计算机基础拷到u盘上,怎么把电脑上的CAD拷贝到u盘里
  20. MMU and MPU

热门文章

  1. 【读后感】Java Concurrency in Practice:7.线程池的使用
  2. 【面试现场】为什么要分稳定排序和非稳定排序?
  3. pandas详解:学习大佬文章后的逐点分析
  4. javascript basical knowledge
  5. JAVA学习生涯开始
  6. windows无需重装系为C盘扩容
  7. 如何排查干扰导致的CAN网络通讯异常
  8. 北京“咱们”与上海“阿拉”
  9. 使用EasyExcel在同一单元格内添加图片和文字,并作格式排版
  10. 设计原则-类似内功口诀