当前位置: 首页 > 网络应用技术

Golang Standard Library标志综合解释

时间:2023-03-06 12:49:02 网络应用技术

  第一篇文章发表在公共帐户中:程序员阅读;欢迎关注,您可以尽快收到文章更新,请指出本文的来源!

  今天,让我们谈谈GO语言标准库中非常简单的库标志。该库的代码仅约1,000行,但是它提供了一个非常完整的命令行参数分析功能。

  如果您使用了诸如UNIX(例如MacOS,Linux)之类的操作系统,我相信您应该了解命令参数是什么,例如下面的两个命令:

  第一个命令是mySQL的客户端,它是命令行参数。第二个命令用于显示当前目录的文件和目录。命令是命令行参数。

  标志库的作用是帮助我们解决命令背后的选项参数到相应的变量。

  要了解库,我们必须从使用开始。让我们快速通过一个简单的示例理解标志库的使用。此示例可以接收从命令行传递的参数以连接数据库。代码如下:

  在命令行窗口中输入以下命令并开始运行程序

  操作结束后,输出结果如下:

  上面的示例是分析命令行选项的模板,包括以下三个步骤:

  在上面的程序中,我们使用StringVar函数来绑定字符串类型的参数,并使用INTVAR函数来绑定整数类型的参数。除字符串和整数外,标志支持布尔值,持续时间,float64,int64,uint64等,等等,以下是这些函数的定义,与stringvar相同。

  上面列出的功能具有后缀,表明我们需要传递变量以接收命令行参数。标志基于这些功能,该功能封装了以下列表。这些功能没有后缀。与上述函数之后,参数有一个附加的返回值。此返回值是接收命令参数的变量指针。

  因此,我们将上述示例重写为以下内容:

  此外,运行程序时,请跟上或查看命令的参数选项,例如:

  标志支持以下三个命令行。参数也可以在参数的前面替换。在标志库中,这并不意味着长选项。

  解析参数时,如果遇到第一个非选项参数(非或启动)或终止符号,它将停止分析。例如,在上面的示例中,我们将运行该命令以更改为以下look:

  运行结果如下。您可以看到分析宿主参数并遇到非选项参数,例如NOFLAG。标志停止解析,因此后续参数仅输出默认值。

  整数类型的参数可以接收十进制,八角形参数和十六进制参数。布尔值可以接收以下参数

  类型参数接收可以是解析参数。

  我们知道标志库用于命令行解析,但是如何解释?让我们在下面分析

  一个命令行参数包含以下四个部分:

  因此,标志设置命令行参数有四个参数,例如:

  标志中有一个名称命令行的变量。它的类型是标志集,例如:

  FLAGSET是命令行参数的集合。当我们调用诸如此类类型之类的函数时,是通过命令行告诉标志库,以及其他信息。该变量将添加到此集合中。

  最后,当我们调用flag.parse函数时,FlagSet结构的解析函数实际上是将命令参数解析为变量。

  从上面的代码中,我们还可以看到,FlagSet的解析功能最终通过获取OS.Args数组的数据来解析命令行参数。

  也就是说,我们知道FLAG用于通过FLAGSET的变量处理命令行参数。实际上,我们还可以创建一个FLAGSET类型变量来处理命令行参数,因此我们可以将上述示例更改为以下外观。

  此外,我们已经知道,标志解析参数的源是像os.args这样的字符串数组,然后我们还可以模拟这样的数组以将数组解散到变量中,而无需分析OS.args数组。以下是以下内容。herethe的例子就是这样做:

  运行程序无需遵循命令后面的命令行参数,如下:

  运行后的结果如下:

  如果标志提供的数据类型无法满足我们的需求,我们还可以自定义类型。自定义类型需要在标志中实现值接口。该界面定义如下:

  字符串()的类型用于打印值,并使用集合方法将命令行参数设置为类型的类型。

  以下是一个自定义示例程序:

  操作结果:

  从上面的示例中,我们可以总结自定义类型的几个步骤:

  当我们使用Linux命令时,我们发现命令的许多参数都有简短的选项和较长的选项,但是标志库不支持简短的选项。当然,还有一种改变方法。例如,我们可以自己定义一个长的选项和简短的选项。

  在上面的程序中,我们定义两个参数并将其绑定到变量,因此可以通过以下两个命令获得参数:

  在本文中,我们全面解释了标志库。阅读本文后,我相信您可以学习以下几点:

  原始:https://juejin.cn/post/70982457444965663