Go - 36 Go 命令行参数
引入:
我们希望能够获取到命令行输入的各种参数,该如何处理?
基本介绍
os.Args是一个string的切片([]string , 且第一个参数即程序名称),用来存储所有的命令行参数;
案例:
// 获取命令行参数 个数
fmt.Println("命令行参数有=", len(os.Args))
// 遍历输出各个参数
for i, v := range os.Args {
fmt.Printf("第[%v]个 参数为=%v", i, v)
}
// 使用 go build -o test.exe main.go 创建一个test.exe文件,
// 测试命令 test.exe tom d:/abc/fads/int.log 707 需要在命令行执行而不是在ide的控制台
flag包用来解析命令行参数
前面的方式是比较原生的方式,对解析参数不是特别方便,特别是带有指定参数形式的命令行;
go设计者给我们提供了flag包,可以方便的解析命令行参数,而且参数顺序可以随意;
实际案例:
// 使用flag包
// 定义几个变量,用于接收命令行的参数值
var user string
var pwd string
var host string
var port int
// &user 就是接收用户命令行中输入的 -u 后面的参数值
// "u" 就是 -u 指定的参数名
// "", 默认值
// "用户名,默认为空" usage 说明
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)
// 使用默认值,即就不要写 -h/-port 参数即可
// test.exe -u root -pwd 12345 --> 此时 -h/port 就会使用默认值