简洁版适合参数少的情况下直接使用先看下面演示:
1、以windows为例,当我们在cmd里运行GO生成的exe文件的时候都是直接运行如:main.exe ,但我们要实现像下例语句:
c:main.exe 张三
//输出:张三你好!
c:main.exe 李四 晚上
//输出:李四晚上好
根据参数生成问候语句,GO语言提供一个oa.Args接受这些参数,它是一个string切片,用来存储所有的命令行参数。
//遍历出os.Args接收到的参数
for i, v := range os.Args {
fmt.Printf("args[%v]=%v", i, v)
}
//或者:使用下面的for循环跑也可以
argsLen := len(os.Args)//获取长度
for i := 0; i < argsLen; i++ {
fmt.Printf("args[%v]=%v", i, os.Args[i])
}
上面我们可以看到接收到的参数是从0开始的,如果参数的顺序写错了就可能获取到错误的参数,所以我们需要使用flag包来解析参数,flag参数顺序可以随意:如我们经常使用mysql的参数如下:
mysql -uroot -p -h 127.0.0.1 -port 3306
使用flag包来接收参数的时候,我们经常用到的方法有2个,IntVar(接收整数)和StringVar(接收字符串)请看下面GO的源代码:
func (f *FlagSet) IntVar(p *int, name string, value int, usage string)
//IntVar用指定的名称、默认值、使用信息注册一个int类型flag,并将flag的值保存到p指向的变量。
func (f *FlagSet) StringVar(p *string, name string, value string, usage string)
//StringVar用法与上面一样的,类型是字符
下面演示怎么通过flag获取到命令行的传参:
var user,host string
var port int
flag.StringVar(&user,"u","","这是一个说明:接收命令行-u后面的参数")//第一个&user是user变量指针,接到的-u后面内容就交给user,默认为空,最后参数是说明
flag.StringVar(&host,"h","127.0.0.1","主机地址")//如果参数没有写,这个参数默认为127.0.0.1
flag.IntVar(&port,"port",3306,"端口号")//使用IntVar接收一个整数参数
flag.Parse()//必须调用这个方法才能将上面获取到的值转换
/*从arguments中解析注册的flag。必须在所有flag都注册好而未访问其值时执行。未注册却使用flag -help时,会返回ErrHelp。*/
fmt.Printf("user=%v",user)//user=root
fmt.Printf("host=%v",host)//host=127.0.0.1
fmt.Printf("port=%v",port)//port=3306
除非注明,网络人的文章均为原创,转载请以链接形式标明本文地址:https://www.55mx.com/post/81
《GO语言学习笔记9:带参数运行程序flag包解析》的网友评论(0)