「这是我参与11月更文挑战的第24天,活动详情查看:2021最后一次更文挑战」。
前言
flag是官方出的命令行参数解析标准库, 让编写命令行工具更加简单
特点
- 支持参数类型string、bool、int、int64、uint、uint64、float float64、duration等
- 支持自定义参数key名
- 支持参数简单判断(参数长度)
- 支持返回指针类型或数据类型
- 自带帮助命令(-h)
例子
博主通常情况用flag.TypeVar的方式比较多,因为flag.Type返回指针类型,使用时需要带着星号(*),容易忘记,且代码编辑器也不提示语法错误
flag.TypeVar例子
TypeVar格式:类型指针,参数key名(长或短都行),默认值(int,bool不能为空)String可以为空,帮助信息
NFlag方法进行了简单判断,如果传入参数过少,会直接中断程度
1 | js复制代码package main |
使用方式: ./main -f etc.conf -n nginx
使用方式: ./main -f etc.conf -n nginx -s true
flag.Type例子
Type格式:参数key名(长或短都行),默认值(int,bool,duration不能为空)String可以为空,帮助信息
这里利用了os.Args来进行参数个数判断。。其实NFlag方法源码也是基于的os.Args
Type方法会返回指针类型,所以需要变量接收,变量在使用时也带个星号*(*name)
1 | js复制代码package main |
使用方式: ./main -message hello -number 1
使用方式: ./main -message hello -number 1 -status true -delay 5
小结
flag用于编写简单的命令行工具完全能满足需求,且是官方出品,打包后体积很小
当然还有大佬出的增强型flag工具(github.com/jessevdk/go…) 支持长短别名,函数回调,结构嵌套等,感兴趣的小伙伴可以看看
本文转载自: 掘金