Go语言内置的flag包实现了命令行参数的解析。

os.Args

os.Args是一个[]string类型。
获取命令参数示例:

func main()  {
if len(os.Args) > 0{
for index,args := range os.Args{
fmt.Printf("args[%d]=%v\n", index, args)
}
}
}
$ go run main.go 1234 2434 546fd d fg
args[0]=/x/main
args[1]=1234
args[2]=2434
args[3]=546fd
args[4]=d
args[5]=fg

os.Args是一个存储命令行参数的字符串切片,它的第一个元素是执行文件的名称。

flag包基本使用

flag参数类型

flag包支持的命令行参数类型有bool、int、int64、uint、uint64、float float64、string、duration。

flag.Type()

flag.Type(flag名, 默认值, 帮助信息)*Type
name := flag.String("name", "张三", "姓名")
age := flag.Int("age", 18, "年龄")

flag.TypeVar()

flag.TypeVar(Type指针, flag名, 默认值, 帮助信息)
var name string
var age int
flag.StringVar(&name, "name", "张三", "姓名")
flag.IntVar(&age, "age", 18, "年龄")

flag.Parse()

定义好命令行flag参数后,需要通过调用flag.Parse()来对命令行参数进行解析。

  • -flag xxx (使用空格,一个-符号)
  • --flag xxx (使用空格,两个-符号)
  • -flag=xxx (使用等号,一个-符号)
  • --flag=xxx (使用等号,两个-符号)

示例

func main()  {
var name string
var age int
var delay time.Duration
flag.StringVar(&name,"name","ares","姓名")
flag.IntVar(&age,"age",20,"年龄")
flag.DurationVar(&delay,"d",0,"延迟时间")
//解析参数
flag.Parse()
fmt.Println(name,age,delay)
//返回命令行参数后的其他参数
fmt.Println(flag.Args())
//返回命令行参数后的其他参数个数
fmt.Println(flag.NArg())
//返回使用的命令行参数个数
fmt.Println(flag.NFlag())
}

使用

$go run main.go -help
Usage of /x/exe/main:
-age int
年龄 (default 20)
-d duration
延迟时间
-name string
姓名 (default "ares") $go run main.go -name ares --age 18 -d=1h
ares 18 1h0m0s
[]
0
3 $go run main.go 1 2 3
ares 20 0s
[1 2 3]
3
0

最新文章

  1. HTTP协议学习---(七)代理
  2. Drawing Arc Using ArcSegment in XAML
  3. Vue表单
  4. codeforces A. Jeff and Digits 解题报告
  5. boolalpha
  6. Spark实战1:shell+独立App使用总结
  7. Spring dataSource
  8. require.js学习笔记
  9. 线程池的submit和execute方法区别
  10. 机器学习(九)隐马尔可夫模型HMM
  11. Spring-MVC运行原理
  12. Python入门-Hello Word
  13. jenkins(8): 实战jenkins+gitlab持续集成发布php项目(代码不需要编译)
  14. Appium介绍及工作原理
  15. 网络名词拾遗--part2
  16. python 模块会导入几次?猴子补丁为什么可以实现?
  17. python nltk 安装及配置说明
  18. crm 2016 tabstatechange event
  19. MFC剪贴板通信
  20. 【多线程系列】AQS CAS简单介绍

热门文章

  1. vue 自定义image组件
  2. vue计算属性的使用
  3. HTML5 结构标签
  4. Jmeter学习笔记(十三)——xpath断言
  5. python的continue和break
  6. c# 搜索字符串
  7. mysql 优化修复表
  8. python链式对比
  9. No.4.测试子类继承父类各代码块和构造方法的执行顺序
  10. 51nod 2486 小b和矩阵