教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang接口----flag.Parse()

Golang接口----flag.Parse()

发布时间:2022-02-17   编辑:jiaochengji.com
教程集为您提供Golang接口----flag.Parse()等资源,欢迎您收藏本站,我们将为您提供最新的Golang接口----flag.Parse()资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg>

Golang中的标准的接口类型flag.Value是我们常用的接口之一,它用来处理命令行参数。我们直接上代码吧。

<pre><code class="lang-go hljs"><span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token punctuation">(</span> <span class="token string">"flag"</span> <span class="token string">"fmt"</span> <span class="token string">"time"</span> <span class="token punctuation">)</span> <span class="token comment">// 定义命令行参数对应的变量,这四个变量都是指针类型</span> <span class="token keyword">var</span> cliName <span class="token operator">=</span> flag<span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">,</span> <span class="token string">"John"</span><span class="token punctuation">,</span> <span class="token string">"Input Your Name"</span><span class="token punctuation">)</span> <span class="token keyword">var</span> cliAge <span class="token operator">=</span> flag<span class="token punctuation">.</span><span class="token function">Int</span><span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">,</span> <span class="token number">22</span><span class="token punctuation">,</span> <span class="token string">"Input Your Age"</span><span class="token punctuation">)</span> <span class="token keyword">var</span> cliGender <span class="token operator">=</span> flag<span class="token punctuation">.</span><span class="token function">String</span><span class="token punctuation">(</span><span class="token string">"gender"</span><span class="token punctuation">,</span> <span class="token string">"male"</span><span class="token punctuation">,</span> <span class="token string">"Input Your Gender"</span><span class="token punctuation">)</span> <span class="token keyword">var</span> cliPeriod <span class="token operator">=</span> flag<span class="token punctuation">.</span><span class="token function">Duration</span><span class="token punctuation">(</span><span class="token string">"period"</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token operator">*</span>time<span class="token punctuation">.</span>Second<span class="token punctuation">,</span> <span class="token string">"sleep period"</span><span class="token punctuation">)</span> <span class="token comment">// 定义一个值类型的命令行参数变量,在 Init() 函数中对其初始化</span> <span class="token comment">// 因此,命令行参数对应变量的定义和初始化是可以分开的</span> <span class="token keyword">var</span> cliFlag <span class="token builtin">int</span> <span class="token keyword">func</span> <span class="token function">Init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> flag<span class="token punctuation">.</span><span class="token function">IntVar</span><span class="token punctuation">(</span><span class="token operator">&</span>cliFlag<span class="token punctuation">,</span> <span class="token string">"flagname"</span><span class="token punctuation">,</span> <span class="token number">1234</span><span class="token punctuation">,</span> <span class="token string">"Just for demo"</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">// 初始化变量 cliFlag</span> <span class="token function">Init</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// 把用户传递的命令行参数解析为对应变量的值</span> flag<span class="token punctuation">.</span><span class="token function">Parse</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment">// flag.Args() 函数返回没有被解析的命令行参数</span> <span class="token comment">// func NArg() 函数返回没有被解析的命令行参数的个数</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"args=%s, num=%d\n"</span><span class="token punctuation">,</span> flag<span class="token punctuation">.</span><span class="token function">Args</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> flag<span class="token punctuation">.</span><span class="token function">NArg</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">for</span> i <span class="token operator">:=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator">!=</span> flag<span class="token punctuation">.</span><span class="token function">NArg</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> i<span class="token operator"> </span> <span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"arg[%d]=%s\n"</span><span class="token punctuation">,</span> i<span class="token punctuation">,</span> flag<span class="token punctuation">.</span><span class="token function">Arg</span><span class="token punctuation">(</span>i<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token comment">// 输出命令行参数</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"name="</span><span class="token punctuation">,</span> <span class="token operator">*</span>cliName<span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"age="</span><span class="token punctuation">,</span> <span class="token operator">*</span>cliAge<span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token string">"gender="</span><span class="token punctuation">,</span> <span class="token operator">*</span>cliGender<span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Printf</span><span class="token punctuation">(</span><span class="token string">"period="</span><span class="token punctuation">,</span> <span class="token operator">*</span>cliPeriod<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre>

从以上代码可以看出,flag.Value接口的用法,我们看到的很多代码如果使用了flag包那么它的主函数中总会有flag.Parse(),这个函数的主要是把用户传递的命令行参数解析为对应变量的值。可能会有些人比较疑惑,这句话什么意思我们来看一下代码就好,但在看代码之前我们先来了解一下命令行传参的格式:

<pre><code class="lang-go hljs"><span class="token operator">-</span>isbool <span class="token punctuation">(</span>一个 <span class="token operator">-</span> 符号,布尔类型该写法等同于 <span class="token operator">-</span>isbool<span class="token operator">=</span><span class="token boolean">true</span><span class="token punctuation">)</span> <span class="token operator">-</span>age<span class="token operator">=</span>x <span class="token punctuation">(</span>一个 <span class="token operator">-</span> 符号,使用等号<span class="token punctuation">)</span> <span class="token operator">-</span>age x <span class="token punctuation">(</span>一个 <span class="token operator">-</span> 符号,使用空格<span class="token punctuation">)</span> <span class="token operator">--</span>age<span class="token operator">=</span>x <span class="token punctuation">(</span>两个 <span class="token operator">-</span> 符号,使用等号<span class="token punctuation">)</span> <span class="token operator">--</span>age x <span class="token punctuation">(</span>两个 <span class="token operator">-</span> 符号,使用空格<span class="token punctuation">)</span> </code></pre>

了解完,我们先运行一下代码,看看结果

接下来,看有无flag.Parse(),写入命令行参数,运行结果的变化:

<ul><li>有flag.Parse()
</li><li>无flag.Parse()

好了,结果非常的明显。</li></ul>

参考链接:link.

到此这篇关于“Golang接口----flag.Parse()”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
Golang接口----flag.Parse()
golang:REST接口
使用docker部署一个带配置文件的golang项目
golang http上传zip文件,自动解压到目录
golang nats[3] queue模式
【Golang】无敌好用GRPC接口测试工具的使用-Swagger
go json数据转发
golang标准库flag包实现实现命令行解析
golang基础教程
基于golang语言web框架gin搭建应用-02配置文件(yml)

[关闭]
~ ~