Cobra是一个Go语言的CLI框架。它包含一个用于创建功能强大的现代CLI应用程序的库,以及一个用于快速生成基于Cobra的应用程序和命令文件的工具。
Cobra提供的功能:
- 简单的基于子命令的CLI:
app server
,app fetch
等。 - 完全符合POSIX标准的标志(包括短标志和长标志)
- 嵌套子命令
- 全局、局部和级联标志
- 使用
cobra init appname
和cobra add cmdname
轻松生成应用程序和命令 - 智能建议(
app srver
… 你是不是想说app server
?) - 自动为命令和标志生成帮助信息
- 自动识别
-h
,--help
等帮助标志 - 自动为应用程序生成bash自动补全
- 自动为应用程序生成man页面
- 命令别名,方便更改而不会破坏其它功能
- 可以灵活定义自己的帮助信息、用法等
- 可选与viper集成
Cobra概念
Cobra应用由命令(Commands )、参数(Args )和标志(Flags )组成。
命令代表操作,标志是对这些操作的修饰符。
最好的应用程序在使用时会像句子一样读起来。用户会知道如何使用应用程序,因为它们本能地了解如何使用它。
遵循的模式是APPNAME VERB NOUN --ADJECTIVE.
或APPNAME COMMAND ARG --FLAG
在下面的例子中,’server’是一个命令,’port’是一个标志:
hugo server --port=1313
在这个命令中,我们告诉Git克隆URL并以bare模式进行操作。
git clone URL --bare
命令(Commands)介绍
命令是应用程序的功能。应用程序支持的每个交互都将包含在一个命令中。一个命令可以有子命令,并可选择运行一个操作。
在上面的例子中,’server’是该命令。
标志(flag)
标志是修改命令行行为的一种方式(其实就是命令参数)。Cobra支持完全符合POSIX标准的标志,以及Go的flag包。Cobra命令可以定义传递给子命令的标志,以及仅对该命令可用的标志。
在上面的例子中,’port’是一个标志。
标志的功能由pflag库提供,它是标志标准库的一个分支,保持相同的接口并添加了POSIX兼容性。