Go语言获取命令行参数

Go语言获取命令行参数

os.Args

os包提供一些函数和变量。

变量os.Args是一个字符串slice。可以理解它是一个动态容量的顺序数组s,可以通过s[i]来访问单个元素,通过s[m:n]来访问一段连续子区间,数组长度用len(s)表示。

在Go语言中,所有的索引使用半开区间,即包含第一个索引,不包含最后一个索引。

os.Args的第一个元素是os.Args[0],它是命令本身的名字;另外的元素是程序开始执行时的参数。表达式s[m:n]表示一个从第m个到第n-1个元素的slice。

编译并运行,在窗口中输入:

运行结果:

可以看到,命令行参数包括了程序路径本身,以及通常意义上的参数。

程序中os.Args的类型是 []string ,也就是字符串切片。所以可以在for循环的range中遍历,还可以用 len(os.Args) 来获取其数量。

flag包

Go 提供了一个 flag 包,支持基本的命令行标志解析。flag包相比单纯的通过os.Args切片分析命令行参数,提供了更强的能力,同时也是复杂的用法。

命令行解析常用函数和方法:

从os.Args[1:]中解析注册的flag。必须在所有flag都注册好而未访问其值时执行。未注册却使用flag -help时,会返回ErrHelp。

Int用指定的名称、默认值、使用信息注册一个int类型flag。返回一个保存了该flag的值的指针。

Bool用指定的名称、默认值、使用信息注册一个bool类型flag。返回一个保存了该flag的值的指针。

String用指定的名称、默认值、使用信息注册一个string类型flag。返回一个保存了该flag的值的指针。

返回解析之后剩下的非flag参数。(不包括命令名)

StringVar用指定的名称、默认值、使用信息注册一个string类型flag,并将flag的值保存到p指向的变量。

程序示例:

编译并运行,在窗口中输入:

运行结果:

上述代码在 flag.Prase() 之前,定义了 i、b、s 三个接受参数的变量, i、b、s 是指针类型的变量。flag.String() 方法返回的是保存日后解析出来的对应参数的值的位置,是一个已经分配好的空间,我们可以用这个指针变量来接受这个位置。

待程序重新进入main函数,执行flag.Parse()函数之后,这三个位置上就出现了我们命令行传入的参数(其实在程序初始化期就有默认值)。

后续我们可以使用i、b、*s 来访问具体的内容。

应用示例:

编译并运行,在窗口中输入:

运行结果:

注意1:如果你省略一个标志,那么这个标志的值自动的设定为他的默认值。

运行结果:

注意2:flag 包需要所有的标志出现位置参数之前(否则,这个标志将会被解析为位置参数)。

运行结果:

注意3:使用 -h 或者 --help 标志来得到自动生成的这个命令行程序的帮助文本。

运行结果:

注意4:如果你提供一个没有使用 flag 包指定的标志,程序会输出一个错误信息,并再次显示帮助文本。

运行结果:

下一篇:

Go语言文件创建------敬请期待!

第十一章 并发编程

第十二章 反射

第十三章 数据格式

第十四章 终端读取

看完本文有收获?那就分享给更多人吧

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181210G1B82D00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券