Golang的命令行输入

简单的命令行输入

package main

import (
    "fmt"
    "os"
)

func main() {
    for _, value := range os.Args {
        fmt.Printf("The value of the input value is: %v\n", value)
    }
}

os.Args是一个string类型的切片,将命令行参数都放在了它里面

我们看一下输出结果

go build easyCommand.go
./easyCommand.exe Hello! World!
The value of the input value is: C:\wintercode\go\goproject\src\go_code\project01\main\commandLine\easyCommand.exe
The value of the input value is: Hello!
The value of the input value is: World!

我们可以看到我们build之后,再输入 ./easyCommand.exe Hello! World!

产生的第一个参数是文件的绝对路径,第二个和第三个参数就是我们想要输入的参数

flag包解析命令行参数

但是上面的输入是要讲究顺序的,比如world总是在Hello后面。在开发的过程中,我们有的时候不想将就顺序,我们可以怎么办呢?

这个时候就用flag包里面的东西

package main

import (
    "flag"
    "fmt"
)

type user struct {
    name string
    age  int
    psw  string
    port int
}

func main() {
    var userOj user
    flag.StringVar(&userOj.name, "name", "myName", "姓名")
    flag.IntVar(&userOj.age, "age", 100, "年龄")
    flag.StringVar(&userOj.psw, "psw", "1234567", "密码")
    flag.IntVar(&userOj.port, "port", 3306, "端口")
    flag.Parse()
    fmt.Println(userOj)
}

这里面flag中的方法中的参数,第一个是变量的指针,第二个是变量在命令行中的表示,第三个是默认值,第四个是说明

下面我们在powershell中输入:

go build flagCommand.go
./flagCommand.exe -name fzder -age 22 -psw 123 -port 8080

得到的输出是

{fzder 22 123 8080}