GO语言使用之命令行参数解析

在go使用中有时候需要对命令行参数进行解析,通常使用os.Args来处理,下面详细分析。

一、os.Args

os.Args是一个string的切片,用来存储所有的命令行参数

var Args []string

Args保管了命令行参数,第一个是程序名。

二、原生方式解析参数

原生的处理思路非常简单,直接使用for range 遍历参数

示例如下:
代码:

func CommandDemo()  {
    fmt.Println("命令行参数如下:")
    for index, val := range os.Args{
        fmt.Printf("arg[%d] = %v \n",index, val)
    }
}

命令行参数:

main.exe jack china name password 1231 d:/c.txt

测试结果如下:

e:\GoProject\src\go_code\grammar\commandLine\code\main>main.exe jack china name password 1231 d:/c.txt
命令行参数如下:
arg[0] = main.exe
arg[1] = jack
arg[2] = china
arg[3] = name
arg[4] = password
arg[5] = 1231
arg[6] = d:/c.txt
e:\GoProject\src\go_code\grammar\commandLine\code\main>

三、使用Flag包解析参数

原生的方式对解析参数不是特别的方便,特别是带有指定参数形式的命令行。
比如:cmd>main.exe -f c:/aaa.txt -p 200 -u root 这样的形式命令行,go设计者给我们提供了 flag包,可以方便的解析命令行参数,而且参数顺序可以随意。
1、介绍使用的结构体和函数
type Flag

type Flag struct {
    Name     string // flag在命令行中的名字
    Usage    string // 帮助信息
    Value    Value  // 要设置的值
    DefValue string // 默认值(文本格式),用于使用信息
}

Flag类型代表一条flag的状态。

func String

func String(name string, value string, usage string) *string

String用指定的名称、默认值、使用信息注册一个string类型flag。返回一个保存了该flag的值的指针。

func StringVar

func StringVar(p *string, name string, value string, usage string)

StringVar用指定的名称、默认值、使用信息注册一个string类型flag,并将flag的值保存到p指向的变量。

func Parse

func Parse()

从os.Args[1:]中解析注册的flag。必须在所有flag都注册好而未访问其值时执行。未注册却使用flag -help时,会返回ErrHelp。

2、示例
代码:

func FlagDemo()  {
    //命令行是:test.exe -u root -p root123 -h localhost -port 8080
    var user, pwd, host, port string
    flag.StringVar(&user, "u", "user","用户名")
    flag.StringVar(&pwd, "p", "123456","密码")
    flag.StringVar(&host, "h", "127.0.0.1","IP地址")
    flag.StringVar(&port, "port", "80","端口号")

    flag.Parse()//解析注册的flag,必须

    fmt.Println("flag解析命令行参数如下:")
    fmt.Printf("user = %v \n", user)
    fmt.Printf("pwd = %v \n", pwd)
    fmt.Printf("host = %v \n", host)
    fmt.Printf("port = %v \n", port)

}

命令行参数:

test.exe -u root -p root123 -h localhost -port 8080

测试结果:

e:\GoProject\src\go_code\grammar\commandLine\code\main>test.exe -u root -p root123 -h localhost -port 8080
flag解析命令行参数如下:
user = root
pwd = root123
host = localhost
port = 8080

e:\GoProject\src\go_code\grammar\commandLine\code\main>

猜你喜欢

转载自blog.csdn.net/TDCQZD/article/details/81368469
今日推荐