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

results matching ""

    No results matching ""