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


你能为默认的命令 , 提供你自己的help命令或模板 。使用下面的方法:
后2个也将适用于任何子命令
当用户提供无效的标记或命令,Cobra 将会返回 用法。
你可能从上面的帮助意识到,默认的帮助将被嵌入到用法里然后作为输出 。
你能提供你自己的用法函数或模板给 Cobra 使用 。
比如帮助,方法和模板都可以重写 。
如果Version字段设置到了根命令,Cobra 会提供了一个顶层 ‘--version’标记 。运行带上‘--version’标记的程序,将会按照模板版本信息 。模板可以通过 cmd.SetVersionTemplate(s string) 方法修改
在命令运行前或运行后,再运行方法非常容易 。PersistentPreRun 和 PreRun 方法将会在 Run 之前执行 。PersistentPostRun 和 PostRun 方法将会在 Run 之后执行 。Persistent*Run 方法会被子命令继承 , 如果它们自己没有定义的话 。这些方法将按照下面的属性执行:
下面的例子 , 2个命令都使用了上面的特性 。当子命令执行的时候,它将执行根命令的 PersistentPreRun ,但不会执行根命令的 PersistentPostRun :
输出:
Cobra 会自动输出建议,当遇到“unknown command”错误时 。这使得当输入错误时, Cobra 的行为类似 git 命令 。例如:
建议会基于注册的子命令自动生成 。使用了 Levenshtein distance 的实现 。每一个注册的命令会匹配2个距离(忽略大小写)来提供建议 。
如果你希望在你的命令里,禁用建议或虚弱字符串的距离,使用:

你可以通过 SuggestFor 来给命令提供明确的名词建议 。这个特性允许当字符串不相近,但是意思与你的命令相近,别切你也不想给该命令设置别名 。比如:
Cobra 可以基于子命令,标记,等生成文档 。以以下格式:
Cobra 可以生成一个bash-completion文件 。如果你给命令添加更多信息,这些completions可以非常强大和灵活 。更多介绍在 Bash Completions。
Go语言命令行利器cobra使用教程【go语言命令行 go语言执行cmd命令】cobra是一个提供简单接口来创建强大的现代CLI界面的库类似gitgit tools,cobra也是一个应用程序 , 它会生成你的应用程序的脚手架来快速开发基于cobra的应用程序
cobra提供:
cobra建立在命令、参数、标志的结构之上
commands代表动作 , args是事物 , flags是动作的修饰符
最好的应用程序在使用时读起来就像句子 , 因此,用户直观地知道如何与它们交互
模式如下:APPNAME VERB NOUN --ADJECTIVE. or APPNAME COMMAND ARG --FLAG(APPNAME 动词 名词 形容词 或者 APPNAME 命令 参数 标志)
一些真实世界的好例子可以更好地说明这一点
kubectl 命令更能体现APPNAME 动词 名词 形容词
如下的例子,server 是command,port是flag
这个命令中,我们告诉git 克隆url
命令是应用程序的中心点 , 应用程序支持的每一个交互都包含在一个命令中,命令可以有子命令,也可以运行操作
在上面的例子中 , server是命令
更多关于cobra.Command
flag是一种修改命令行为的方式 , cobra支持完全兼容POSIX标志,也支持go flag package,cobra可以定义到子命令上的标志,也可以仅对该命令可用的标志
在上面的命令中,port是标志
标志的功能由 pflag library 提供,pflag library是flag标准库的一个分支,在添加POSIX兼容性的同时维护相同的接口 。
使用cobra很简单 , 首先,使用go get按照最新版本的库,这个命令会安装cobra可执行程序以及库和依赖项
下一步,引入cobra到应用程序中

推荐阅读