试着运行一下,第一个参数是执行文件的路径。

$ go run demo.go hello world hello golang 

args[0]=/var/folders/72/lkr7ltfd27lcf36d75jdyjr40000gp/T/go-build187785213/b001/exe/demo 

args[1]=hello 

args[2]=world 

args[3]=hello 

args[4]=golang 

从上面你可以看到,os.Args 只能处理简单的参数,而且对于参数的位置有严格的要求。对于一些比较复杂的场景,就需要你自己定义解析规则,非常麻烦。

如果真的遇上了所谓的复杂场景,那么还可以使用 Golang 的标准库 flag 包来处理命令行参数。

本文将介绍 Golang 标准库中 flag 包的用法。

1. 参数种类

根据参数是否为布尔型,可以分为两种:

布尔型参数:如 --debug,后面不用再接具体的值,指定就为 True,不指定就为 False非布尔型参数

非布尔型参数:非布尔型,有可能是int,string 等其他类型,如 --name jack ,后面可以接具体的参数值

根据参数名的长短,还可以分为:

长参数:比如 --name jack 就是一个长参数,参数名前有两个 -

短参数:通常为一个或两个字母(是对应长参数的简写),比如 -n ,参数名前只有一个 -

2. 入门示例

我先用一个字符串类型的参数的示例,抛砖引玉

package main 

 

import ( 

    "flag" 

    "fmt" 

 

func main(){ 

    var name string 

    flag.StringVar(&name, "name", "jack", "your name") 

 

flag.Parse()  // 解析参数 

    fmt.Println(name) 

flag.StringVar 定义了一个字符串参数,它接收几个参数

第一个参数 :接收值后,存放在哪个变量里,需为指针

第二个参数 :在命令行中使用的参数名,比如 --name jack 里的 name

第三个参数 :若命令行中未指定该参数值,那么默认值为 jack

第四个参数:记录这个参数的用途或意义

dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。