1.1.1. 一、使用os.Args获取命令行参数。
当我们运行go语言的入库函数main的时候,可以使用os包的 Args 变量(os.Args)获取命令行的参数。os.Args 是一个string类型的切片[]string
,代码如下:
func main() {
args := os.Args
fmt.Println(args)
}
- go run 运行之后结果如下:
$ go run main.go 111 222 333 你好
[C:\Users\ADMINI~1\AppData\Local\Temp\go-build159241370\b001\exe\main.exe 111 222 333 你好]
说明:
1、这里我使用空格分隔,给main.go传递了4个参数(111、222、 333 、你好)
2、args 输出了5个元素,第一个是main.exe文件的位置。后面几个是我传递的参数。
- build 编译成exe文件之后再执行,效果如下:
$ go build main.go
$ ./main.exe 111 222 333 你好
[G:\GitRepository\wkcom\goWorksp\Hello\src\commandLineDemo\main.exe 111 222 333 你好]
也是一样的效果,打印出了exe文件的位置和参数。
1.1.2. 二、使用flag包解析命令行参数。
flag包实现了命令行参数的解析。里面有2个方法比较重要:
1、IntVar 方法 获取一个 int 类型的参数值。
func (f *FlagSet) IntVar(p *int, name string, value int, usage string)
方法参数说明:
- name : 参数名。
- value : 如果没有获取到参数,把这个值设置为参数的默认值。
- usage :参数说明。当用户输入非法的参数时,会提示用户。
- p :指针类型的变量,用来存储参数的值。
2、StringVar 方法获取一个 String 类型的参数值。方法参数和 IntVar 方法类似。
func (f *FlagSet) StringVar(p *string, name string, value string, usage string)
- 示例如下:
func main() {
var user string
var pwd string
var port int
// user 接收命令行输入的 -u 参数值。
// 如果没有 -u 参数默认值为空""
flag.StringVar(&user,"u","","获取用户名,默认为空。")
flag.StringVar(&pwd,"pwd","","获取密码,默认为空。")
flag.IntVar(&port,"p",80,"获取端口,默认为80。")
flag.Parse() // 执行转换。这个必须有。
fmt.Println(user,pwd,port)
}
运行如下:可以看到,运行之后打印出了各个参数值。
$ go run main.go -u wkroot -pwd 1234sw -p 9999
wkroot 1234sw 9999
如果少输入 -p 参数,将使用默认值,如下:
$ go run main.go -u wkroot -pwd 1234sw
wkroot 1234sw 80
如果输入一个错误的参数值,比如端口输入一个不是int的数,将会有提示,如下:
$ go run main.go -u wkroot -pwd 1234sw -p io
invalid value "io" for flag -p: parse error
Usage of C:\Users\ADMINI~1\AppData\Local\Temp\go-build922005274\b001\exe\main.exe:
-p int
获取端口,默认为80。 (default 80)
-pwd string
获取密码,默认为空。
-u string
获取用户名,默认为空。
exit status 2