长沙网站外包公司,ecilpse做网站,最新国内新闻10条,怎样不让网站被收录说起 golang 的 flag 个包#xff0c;我们第一反应的是什么呢#xff1f;至少我曾经第一次看到 flag 包的时候#xff0c;第一反应是想起写 C 语言的时候咱们用于定义一个表示的#xff0c;我们一般会命名为 flag 变量 实际上 golang 的 flag 包是用于处理命令行参数的工具…说起 golang 的 flag 个包我们第一反应的是什么呢至少我曾经第一次看到 flag 包的时候第一反应是想起写 C 语言的时候咱们用于定义一个表示的我们一般会命名为 flag 变量 实际上 golang 的 flag 包是用于处理命令行参数的工具包我们可以基于这个包来开发自定义的命令行工具
对于命令行相信大家都不陌生吧学过 C 的就知道如下代码是否很熟悉
int main(int argc,char **argv)
{// 打印 agrc 和 argvreturn 0;
}其中 argc 表示命令行的参数个数 argv 二级指针表示实际的命令参数
那么对于咱们的 golang 是如何玩的咱们先写个 demo 看看效果
main.go
func main() {if len(os.Args) 0 {fmt.Println(len(os.Args) , len(os.Args))for _, v : range os.Args {fmt.Println(v)}}
}效果如下
咱们 go build 输出程序名为 testFlag 的可执行程序如下运行即可 当然需要看非常详细和全面的关于 flag 包的内容可以直接查看官方文档 此处咱们是对 flag 包的介绍平常都会使用到的一些功能以及注意事项分别从如下 3 个小点介绍一下常用的功能
注册 flag 和 Flag 解析支持的数据类型 绑定 flag 变量 flag.Parse() 的使用方式
注册 flag 和 Flag 解析支持的数据类型
我们可以看到上述简单 demo 演示的是咱们运行可执行程序的时候追加我们期望的参数
实际上我们使用的比较多的是在程序内部去设置 flag例如一般写 web 服务器的时候就会去使用 flag 包设置端口
咱们在程序中使用 flag 包定义一个端口 通过效果我们可看到咱们使用 flag 包来设置命令行参数时实际上返回的是一个指针这个地方可别弄错了 在我们的代码中我们可以看到 flag 包他支持这么多数据类型的注册如下
基本的 intint64uintuint64 整数的 flag 支持这些进制的1234、0664、0x1234 布尔值bool 布尔值可以这样来写1, 0, t, f, T, F, true, false, TRUE, FALSE, True, False 浮点数floatfloat64 字符串string 时间段 duration 也是支持的很好的例如我们可以设置为 100ms1h1us1h25m 等等都是可以的 那么对应到咱们去设置各种数据类型的命令行参数的时候我们就可以简单的使用 flag 包对应的函数即可如
port : flag.Int(port, 8866, 端口)
name : flag.String(name, 小猪, 姓名)
money : flag.Float64(money,10.36,钱)其他的照葫芦画瓢就可以了这些函数的参数都是一样的效果
参数1 flag 名称 参数2 默认值 参数3 帮助信息
这里再来敲一下黑板上述的 portnamemoney 都是指针类型的哦
绑定 flag 变量
如果用不习惯上述方式来注册 flag 的话我们也是可以先定义一个变量然后将命令行参数绑定到变量上如
var city string
var food string
var age intflag.StringVar(city,city,beijing,城市)
flag.StringVar(food,food,roast duck,美食)
flag.IntVar(age,age,18,年龄)在 flag 包中我们可以看到也有一堆关于各种数据类型绑定变量的函数 如flag.StringVar(city,city,beijing,城市)
参数类型和上述说到的类似多了一个参数放在最前面
参数1 具体的变量地址 参数2 flag 名称 参数3 默认值 参数4 帮助信息
flag.Parse() 的使用方式
前面说了那么多的铺垫那么我应该如何来使用呢不可能我们都只去使用默认值吧 自然是自己开发自定义的命名行工具提供出去使用咯这就需要咱们使用 flag.Parse() 了
flag.Parse() 来解析命令行参数写入注册的 flag 里解析出来的是值还是指针这个取决于上面咱们注册 flag 的方式再次敲黑板此处可别弄错了
例如咱们写一个简单的 demo 此处我们可以看到 port 是注册的自身的flag 的port 是一个指针所以咱们通过 flag.Parse() 之后使用 port 时需要取地址
咱们可以参看效果如下 编译执行可执行程序之后我们可以看到输出的是默认值另外咱们机上 --help 参数就可以看到我们编写的帮助信息
站在使用者的角度去使用这个工具按照提示输入相关信息之后我们可以看到输出的结果是我们所期望的
当然此处需要提几个注意事项
上述我们可以看到咱们给对应的 flag 传值的时候是 -flag xxx我们也是可以 --flag xxx我们还可以 -flagxxx 同理 --flagxxx 也是 ok 的
当然如果对 golang 自身对于 flag 包的实现方式感兴趣的兄弟也可以好好看看 flag 包中对于命名行参数的字符串数据解析 func (f *FlagSet) parseOne() (bool, error) {
感谢阅读欢迎交流点个赞关注一波 再走吧
欢迎点赞关注收藏
朋友们你的支持和鼓励是我坚持分享提高质量的动力 好了本次就到这里
技术是开放的我们的心态更应是开放的。拥抱变化向阳而生努力向前行。
我是阿兵云原生欢迎点赞关注收藏下次见~ 可以进入地址进行体验和学习https://xxetb.xet.tech/s/3lucCI