go语言cmd命令 go语言执行cmd命令( 三 )


如果需要在命令中禁用建议或调整字符串距离 , 请使用:
or
您还可以使用SuggestFor属性显式设置将为其建议给定命令的名称 。这允许对在字符串距离方面不接近的字符串提供建议,但在您的一组命令中是有意义的,并且对于某些您不需要别名的字符串 。例子:
Cobra可以基于子命令、标志等生成文档 。请在 docs generation文档 中阅读更多关于它的信息 。
Cobra可以为以下shell生成shell完成文件:bash、zsh、fish、PowerShell 。如果您在命令中添加更多信息,这些补全功能将非常强大和灵活 。在 Shell Completions 中阅读更多关于它的信息 。
Cobra is released under the Apache 2.0 license. SeeLICENSE.txt
golang命令行库Cobra的使用 写了2次才写完 , 内容很长,翻译了很久,内容来源于Cobra github介绍 。翻译完也更全面的了解了Cobra,功能相当强大完善 , 各种使用的场景都考虑到了 。另外也扩展了一些其它知识,比如 命令行玩法 ,Levenshtein distance 等等 。以下是正文:
Cobra提供简单的接口来创建强大的现代化CLI接口 , 比如git与go工具 。Cobra同时也是一个程序, 用于创建CLI程序
Cobra是建立在结构的命令、参数和标志之上 。
命令代表操作,参数和标志是这些行动的修饰符 。
最好的应用程序就像读取句子 。用户会知道如何使用本机应用程序,因为他们将理解如何使用它 。
比如下面的例子,server 是命令,port 是标志:
在下面的命令,我们告诉Git克隆url地址bare
使用Cobra很简单 。首先,使用 go get 安装最新版本
然后在你项目里引用Cobra
通常基于Cobra的应用程序将遵循下面的组织结构,当然你也可以遵循自己的接口:
在Cobra应用程序中,通常main.go文件非常空洞 。它主要只干一件事:初始化Cobra 。
Cobra提供自己的程序来创建你的程序并且添加你想要的命令 。这是最简单的方式把Cobra添加到你的程序里 。
这里 你能找到相关信息
使用Cobra,需要创建一个空的main.go文件和一个rootCmd文件 。你可以选择在合适的地方添加额外的命令 。
Cobra不需要特殊的构造函数 。简单的就可以创建你的命令 。
理想情况下你把这个放在在 app/cmd/root.go
你会另外定义标志和处理配置init()函数 。
比如 cmd/root.go
你需要在main函数里执行root命令 。
通常main.go文件非常空洞 。它主要只干一件事:初始化Cobra 。
其它的命令通常定义在cmd/目录下的自己文件内
如果你想创建一个version命令,你可以创建cmd/version.go文件,并在文件里这么写:
标志提供修饰符控制动作命令如何操作
当标志定义好了,我们需要定义一个变量来关联标志
'持久'表示每个在那个命令下的命令都将能分配到这个标志 。对于全局标志,'持久'的标志绑定在root上 。
Cobra默认只在目标命令上解析标志,父命令忽略任何局部标志 。通过打开 Command.TraverseChildrenCobra将会在执行任意目标命令前解析标志
你同样可以通过 viper 绑定标志:
在这个例子中,永久的标记author被 viper 绑定,注意 , 当用户没有给 --author 提供值 , author 不会被赋值 。
标记默认是可选的,如果你希望当一个标记没有设置时,命令行报错,你可以标记它为必须的
验证位置参数可以通过Command 的 Args 字段 。
内置下列验证方法
一个设置自定义验证的例子
在下面的例子,我们定义了3个命令 。2个在顶级,一个(cmdTimes)是其中一个顶级命令的子命令 。在这个例子里,由于没有给 rootCmd 提供 Run  , 单独的root是不能运行的,必须要有子命令 。

推荐阅读