文章目录
Cobra 程序包简单解读
前言
笔者最近有改写 cobra 程序包的作业需要完成,所以去查看学习了原作者 spf13 写的cobra 程序包,这里记录一下自己的学习心得。
https://github.com/spf13/cobra
cobra 简介
cobra 是一个现代 CLI 命令行的 golang 库,是一个用于生成程序应用和命令行文件的程序
- Cobra是一个库,提供了一个简单的界面来创建类似于git&go工具的强大的现代CLI界面。
- Cobra也是一个应用程序,它将生成您的应用程序支架,以快速开发基于Cobra的应用程序。
cobra 功能
-
简易的子命令行模式,如app server、app get等
-
完全兼容posix命令行模式
-
支持全局、局部、串联flags
-
使用cobra很容易生成应用程序和命令,使用cobra create和cobra cmdname
-
如果命令输入有错误,将提供只能建议,如app gt,将提示gt不存在,是否是app get
-
自动生成详细的help信息,如app help
-
自动识别-h,–help和帮助flag
-
自动生成应用程序在bash下命令自动改完成功能
-
自动生成应用程序的man手册
-
命令行别名
-
自定义help和usage信息
-
可选的紧密集成的viper app
获取 cobra
通过以下命令即可直接获取程序包
go get -v github.com/spf13/cobra/cobra
获取包后,在包的目录下运行以下命令,即可完成 cobra 的安装
go install
运行 cobra
在命令行中输入 cobra 即可查看 cobra 的相关用法:
了解上面的说明即可实验,下面以一个cmd为例子:
cobra add pinfo
: 创建一个叫pinfo
的golang project
,之后你的命令也就叫pinfo
了cobra add name
: 对name
创建一个sub-command
,会直接生成一个name.go
文件,- 对
name.go
添肉
函数解析
Command 结构体
Command 结构体是 cobra 抽象出来的核心概念,它的实例表示一个命令或者是一个命令的子命令。下面的代码仅展示 Command 结构体中一些比较重要的字段:
type Command struct {
// 用户通过指定 Run 函数来完成命令
// PreRun 和 PostRun 则允许用户在 Run 运行的前后时机执行自定义代码
PersistentPreRun func(cmd *Command, args []string)
PreRun func(cmd *Command, args []string)
Run func(cmd *Command, args []string)
PostRun func(cmd *Command, args []string)
PersistentPostRun func(cmd