在项目有时候需要来获取从命令行输入的参数,例如在命令行中指定配置文件

可以使用os包和flag包

一、通过golang的os库

os包以跨平台的方式,提供了一些与操作系统交互的函数和变量。

os.Args 获取命令行参数,返回一个字符串数组,第一个参数就是执行文件本身,后面的参数是从命令行输入的参数

 

例如:


  func main() {
       for i := range os.Args {
              fmt.Println(os.Args[i])
       }
  }


 

通过命令行运行该testOs.go文件

$  go run testOs.go"aaaaa"  "bbbbb"
执行结果:
 	 ……\testOs.ext
	aaaaa
	bbbbb


 

二、flag包

1.声明flag

常用方法:

1). func t(namestring, value bool, usage string) *t

其中t为常用的数据类型如Bool,Int,Uint,Uint64,String,等

参数说明:name为flag名称,value为默认值,usage使用说明

返回的是指针

 

2). func tVar(p *int, name string, value int, usage string)

其中t为常用的数据类型如Bool,Int,Uint,Uint64,String,等

作用:绑定flag到指定的变量p

 

2.当所有flag声明完成后使用 flag.Parse()

       来解析命令行参数到指定的flag

3.命令行传参的格式

使用flag来操作命令行参数,支持的格式如下:

	-id=1
	--id=1
	-id  1
	--id 1


 

 

 

例:


  func main() {
       ok :=flag.Bool("ok",false,"is ok")
       id :=flag.Int("id",0,"id")
       port :=flag.String("port","8080","http listen port")
       var name string
       flag.StringVar(&name,"name","123","name")
       flag.Parse()
 
       fmt.Println("ok:",*ok)
       fmt.Println("id:",*id)
       fmt.Println("port:",*port)
       fmt.Println("name:",name)
 }
 
在命令行运行testFlag.go文件
$ go run testFlag.go -id=2 -name="tom"
执行结果:
      	ok: false
	id: 2
	port: 8080
	name: tom


             

使用-h参数可以查看使用帮助:


$ go run flag.go -h

	-id=0: id
	-name="123": name
	-ok=false: is ok
	-port=":8080": http listen port