在项目有时候需要来获取从命令行输入的参数,例如在命令行中指定配置文件
可以使用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