Cobra(Go的CLI应用框架)
什么是Cobra
Cobra 是 Go 的 CLI 框架。它包含一个用于创建功能强大的现代 CLI 应用程序的库和一个用于快速生成基于 Cobra 的应用程序和命令文件的工具。它是由 Go 团队成员 spf13为hugo创建的,已被最受欢迎的 Go 项目采用。
Cobra功能
- 简单的基于子命令的 CLI:
app server
app fetch
等 - 嵌套
子命令
- 自动帮助标志识别
-h
--help
- 全局、本地、级联标志
- 应用程序自动生成
bash
- 与
viper
可紧密集成。 - ...
安装Cobra
安装Cobra
是非常简单的,我们只需要在自己的Go
模块下,执行以下命令便可直接使用Corbra
。
// 安装Corba
go get -u github.com/spf13/cobra/cobra
在使用过程中,你只需要导入使用以下命令导入Cobra
的源码包,即可直接使用Cobra
的功能来进行自定义开发
// 导入源码包
import " github.com/spf13/cobra"
Cobra常用命令
Cobra
为了能让我们更加快速的构建自己的Cli
工具,提供了一些快捷构建的命令。
- 创建命令程序应用
cobra init
- 添加命令
cobra add version
命令的组成结构
开发一个自定义的命令行应用之前,我们需要了解一个命令的基本组成结构 ,一个命令的基本组成结构如下所示。
-
命令
Commands
执行动作 -
参数
Args
执行参数 -
标志
Flags
表示对动作的修饰下面我们通过一些命令来更快的理解
命令的组成结构
# git克隆命令
git clone URL --bare
- git
(命令)
:跟命令,一般为应用程序的名字 - clone
(命令)
:是git
下的一个子命令 - URL
(参数)
:这里泛指git
需要clone
的地址 - --bare
(标志)
:这里泛指使用什么方式进行克隆
拓展点:
在Cobra
中的标志,有持久标志
和本地标志
两种标志。
- 持久标志:即在该命令
Commands
应用程序中所有的标志都可以使用。 - 本地标志:只能在特定的命令
Commands
中使用。
// 绑定到持久标志
RootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.cobra_exp1.yaml)")
// 绑定本地标志
RootCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle")
Cobra实战
一、初始化go moudle
模块
二、切换到初始化的模块下,安装cobra
go get -u github.com/spf13/cobra/cobra
三、配置cobra
的环境变量,更具自己操作系统酌情配置即可
四、初始化项目
# 初始化完成我们可看到如下的目录结构
cobra init cobra-demo --pkg-name github.com/xcbeyond/cobra-demo
# 打开初始化选择的目录
├── cmd
│ ├── root.go
├── go.mod
├── go.sum
└── main.go
五、打包应用程序
# 打包go应用程序
go build
# 打包完成后会生成可执行文件,该文件即是我们的命令行工具
六、添加命令
# 向应用程序中添加子命令
cobra add version
#查看目录结构(多了version.go文件)
├── cmd
│ ├── root.go
│ ├── versiongo
├── go.mod
├── go.sum
└── main.go
#添加完成后重新打包,即可使用如下命令
cobra-demo version
Cobra文档
Cobra
的更多高级特性可参考文档