Toasobi
7.28 常用标准库 - flag
本文最后更新于2022年07月28日,已超过893天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!
1.1.1 os.Args
获取命令行参数。下面举例
func main() {
//os.Args是一个[]string
if len(os.Args) > 0 {
for index, arg := range os.Args {
fmt.Printf("args[%d]=%v\n", index, arg)
}
}
}
两次输出如下:
os.Args是一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称。
!
1.1.2 flag包的基本使用
flag包的作用是可以在命令行输入参数并赋值给代码内变量
要使用首先当然是要导入flag包
flag参数类型、
flag包支持的命令行参数类型有bool、int、int64、uint、uint64、float float64、string、duration。
flag参数 | 有效值 |
---|---|
字符串flag | 合法字符串 |
整数flag | 1234、0664、0x1234等类型,也可以是负数。 |
浮点数flag | 合法浮点数 |
bool类型flag | 1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False。 |
时间段flag | 任何合法的时间段字符串。如”300ms”、”-1.5h”、”2h45m”。 合法的单位有”ns”、”us” /“µs”、”ms”、”s”、”m”、”h”。 |
下面讲解如何定义flag包参数
1.1.3 定义命令行flag参数
flag.Type()
var name string
var age int
var married bool
var delay time.Duration
flag.StringVar(&name, "name", "张三", "姓名")
flag.IntVar(&age, "age", 18, "年龄")
flag.BoolVar(&married, "married", false, "婚否")
flag.DurationVar(&delay, "d", 0, "时间间隔")
flag.TypeVar()
var name string
var age int
var married bool
var delay time.Duration
flag.StringVar(&name, "name", "张三", "姓名")
flag.IntVar(&age, "age", 18, "年龄")
flag.BoolVar(&married, "married", false, "婚否")
flag.DurationVar(&delay, "d", 0, "时间间隔")
两者十分相似
定义好之后要使用需要通过flag.Parse()来对命令行参数进行解析
支持的命令行参数格式有以下几种:
- -flag xxx (使用空格,一个-符号)
- --flag xxx (使用空格,两个-符号)
- -flag=xxx (使用等号,一个-符号)
- --flag=xxx (使用等号,两个-符号)
1.1.4 flag其他函数
- flag.Args() ////返回命令行参数后的其他参数,以[]string类型
- flag.NArg() //返回命令行参数后的其他参数个数
1.1.5 完整示例与讲解
func main() { //定义命令行参数方式1 var name string var age int var married bool var delay time.Duration flag.StringVar(&name, "name", "张三", "姓名") flag.IntVar(&age, "age", 18, "年龄") flag.BoolVar(&married, "married", false, "婚否") flag.DurationVar(&delay, "d", 0, "延迟的时间间隔") //解析命令行参数 flag.Parse() fmt.Println(name, age, married, delay) //返回命令行参数后的其他参数 fmt.Println(flag.Args()) //返回命令行参数后的其他参数个数 fmt.Println(flag.NArg()) //返回使用的命令行参数个数 fmt.Println(flag.NFlag()) }
在没有输任何参数时的输出:
![image.png]
我们可以使用-help命令来查看命令行参数的使用提示
现在我们来使用flag
!
一定要注意duration的单位和bool值加等号