天天看点

go的命令行参数一 问题引出二 点睛三 实战四 flag 包用来解析命令行参数

一 问题引出

我们希望能够获取到命令行输入的各种参数,该如何处理?

go的命令行参数一 问题引出二 点睛三 实战四 flag 包用来解析命令行参数

二 点睛

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

三 实战

1 需求

编写一段代码,可以获取命令行各个参数。

2 代码

package main

import (
   "fmt"
   "os"
)

func main() {
   fmt.Println("命令行的参数有", len(os.Args))
   // 遍历 os.Args 切片,就可以得到所有的命令行输入参数值
   for i, v := range os.Args {
      fmt.Printf("args[%v]=%v\n", i, v)
   }
}
           

3 测试

E:\gocode\src\chapter14\argsdemo>test.exe tom c:/aaa/bbb/test.log 99

命令行的参数有 4

args[0]=test.exe

args[1]=tom

args[2]=c:/aaa/bbb/test.log

args[3]=99

四 flag 包用来解析命令行参数

1 说明

前面的方式是比较原生的方式,对解析参数不是特别的方便,特别是带有指定参数形式的命令行。

例如:cmd>main.exe -f c:/aaa.txt -p 200 -u root 这样的形式命令行,go 设计者给我们提供了 flag包,可以方便的解析命令行参数,而且参数顺序可以随意。

编写一段代码,可以获取命令行各个参数。

2 代码

package main

import (
   "flag"
   "fmt"
)

func main() {
   // 定义几个变量,用于接收命令行的参数值
   var user string
   var pwd string
   var host string
   var port int
   // &user 就是接收用户命令行中输入的 -u 后面的参数值
   // "u" ,就是 -u 指定参数
   // "" , 默认值
   // "用户名,默认为空" 说明
   flag.StringVar(&user, "u", "", "用户名,默认为空")
   flag.StringVar(&pwd, "pwd", "", "密码,默认为空")
   flag.StringVar(&host, "h", "localhost", "主机名,默认为localhost")
   flag.IntVar(&port, "port", 3306, "端口号,默认为3306")
   // 这里有一个非常重要的操作,转换, 必须调用该方法
   flag.Parse()
   // 输出结果
   fmt.Printf("user=%v pwd=%v host=%v port=%v",
      user, pwd, host, port)
}
           

3 测试

E:\gocode\src\chapter14\flagdemo>flagdemo.exe -u root -pwd 123456 -h 127.0.0.1 -port 3306

user=root pwd=123456 host=127.0.0.1 port=3306

go