开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:flag 包解析命令行参数】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9735
flag 包解析命令行参数
一、flag 包用来解析命令行参数
说明:前面的方式是比较原生的方式,对解析参数不是特别的方便,特别是带有指定参数形式的命令行。
比如:cmd>main.exe -fci/aaa.txt -p 200 -u root
这样的形式命令行,go 设计者给我们提供了 flag 包,可以方便的解析命令行参数,而且参数顺序可以随意,请编写一段代码,可以获取命令行各个参数,
D:woproject\src vo_code>test.exe -u root -pud root -h 192.168.8.1 _port 3306
User
=
root
Pwd = root
H
ost
=
192.168.0
.1
用这个 os.Args
这个切片来获取参数的缺点是必须严格按照一定顺序进行。在实际的开发中,用 Mexico 或者其他的数据库,MYSQL 在登录的时候,它往往是这样写的:
D
:\
g
oproject src\o-code`hapter14\argsdemo>mysql -u roo
1 12345 -h localhost -P 3306
。在很多这个程序里面常用这种用法,前面是一个应用程序,后边儿用一个 - 来指定参数。简而言之,用前面有个指定参数的一个标识,后面的数值才是这个参数的值。指定参数的优点就是顺序就不受约束,-u root
可以写在前面,也可以写到后面。用 flag 包来解析命令行参数,举例说明前面的方式,它是比较原生态的。对解析参数,不是特别方便,特别是带有指定参数形式的命令行。比如:D:woproject\src vo_code>test.exe -u root -pud root -h 192.168.8.1 _port 3306
, 要求通过这个指定的参数,来获取到需要的参数值,通过这个指令参数来拿到后面真正的参数值,这种用法的好处是参数顺序可以随意,可以支持根据指定参数来获取参数值。
案例:
package main
import (
"fmt"
"flag”
func main()f
//定义几个变量,用于接收命令行的参数值
var user string
var pud string
var host string
var port int
//&user 就是接收用户命令行中输入的-u 后面的参数值
/1"u”,就是-u 指定参数
//*"。默认值
1/"用户名,默认为空”说明
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=%",
user, pwd, host, port)
通过这个指令参数来获取参数值,来代码实现。打开文档,点击 flag,实现了命令行参数的解析。
func Parse
func Parse()
从 0S.Args (1]中解析注册的 Mlag。必须在所到都注册好而来访问其值时现行。未注册知使用 flag -help 时,会返回 ErrHelp.
func IntVar
func Intvar(p *int, name string, value int, ueuge string)
Intvar 用指定的各称、默认值、使用信息注册一个 int 类型 Mag,并将 flag 的值保存到 p 指向的变量。
Localhost 是主机名,总经理默认为 localhost。默认的意思是没有指定这个参数,house 的默认就是 localhost。Flag 端口是 inter 类型,用的是 VR,后面必须调用转换的方法。打开文档,点击 flag,点击覆盖,下面有个 PLC。往下 lawyer。往下走看这里点一下,从这个数组里面解析注册的 flag。必须在所有 flag 都注册好后,才能访问执行。简而言之,就是必须进行转换,才能真正的把这个切片里面的这些值转换成功。
演示:
D:goproject\src go_code^chapter14\F lagdemo>test.exe -u root -pud 123456 -h 127.0.0.5 -port 8088
user-root pwd=123456 host=127.0.0.5 port-8080
D:\goproject\src\o_codeNchapter14\flagdemo>test.exe -pwd 123456 -h 127.0.0.5 -port 8088 -u tonjack
user-tomjack pwd=123456 host-127.0.0.5 port-8080
D:\goproject\src\go_code chapter14\lagdemo>test.exe -pwd 123456 -h 127.0.0.5 -u tomjack
user=tomjack pwd=123456 host=127.0.0.5 port=3306