75142913在线留言
GO语言学习笔记9:带参数运行程序flag包解析_Go语言_网络人

GO语言学习笔记9:带参数运行程序flag包解析

Kwok 发表于:2020-10-09 19:09:10 点击:55 评论: 0

GO可以带参数运行时接收参数有2个方式。

一、简洁版

简洁版适合参数少的情况下直接使用先看下面演示:

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])
}

二、使用flag包来解析命令行参数

上面我们可以看到接收到的参数是从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
0
感谢打赏!

《GO语言学习笔记9:带参数运行程序flag包解析》的网友评论(0)

本站推荐阅读

热门点击文章