Cobra 介绍

Cobra 是一个 Go 语言开发的命令行(CLI)框架,提供了简单的接口来构建命令行界面,Cobra 允许轻松地定义命令和子命令结构。被用在很多 Go 语言的项目中,比如我们熟知的 K8s、Docker 等等

Cobra 在我的项目中作为命令行解析层,接触到这个命令行框架,了解到 Cobra 的强大功能,故在此进行记录

附上 Cobra 的项目地址以及开发网站

Cobra 概念

Cobra 是基于命令 commands 、参数 arguments 、选项 flags 三个部分构建的

要遵循的模式是 APPNAME VERB NOUN --ADJECTIVE.APPNAME COMMAND ARG --FLAG

应用名称 动词 名词 –形容词应用名称 命令 参数 –标志

appname

应用程序的名称,标识要运行的程序或工具。例如,gitcurldocker

commands

描述了要执行的操作类型。它通常代表了一个功能或者动作,在某些 CLI 设计中,这部分可能直接就是一个具体操作的名称,如pullpush

arguments

名词或参数,提供了动词作用的对象或者是更具体的上下文信息。例如:go build main.go, 这个命令的go是应用程序名称(appname),build是操作类型(commands),而main.go就是build作用的对象

flags

命令行标志或选项,用来修改命令的行为或提供额外的配置信息。通常以两个连字符--开头,后面跟着标志名称。在某些情况下,如短选项,也可能只有一个连字符和一个字母

示例:

  • git commit -m "Initial commit":这里git是应用程序名称,commit是命令,-m是一个标志,后面跟着的 "Initial commit" 是该标志的值,作为提交信息。

  • hugo server --port=1313hugo为应用程序名称,server是命令,port是标志

入门

首先安装 Cobra

go get -u github.com/spf13/cobra/cobra

接着我们需要建立一个目录结构:

▾ app
    ▾ cmd
       root.go
       client.go
    main.go

Cobra 不需要任何特殊的构造函数。只需创建您的命令即可。


root.go文件

  • 创建rootCmd结构体
  • 编写Execute方法

rootCmd

main.go文件非常裸露。它有一个目的:初始化眼镜蛇

alt text

此时我们可以先运行一下查看效果

编译 go build -o app

执行命令 ./app

此时我们发现,执行了 Run 函数中的fmt.Println("app hugo...")

除此之外我们并没有添加任何的命令,故接下来我们开始添加子命令


编写 client.go 注意这个文件也是在cmd文件夹下的

clientCmd

编译 go build -o app

执行命令 ./app client

执行了 Run 函数中的代码


另外,也可以在root.go文件中写入init函数

init cobra.OnInitialize(initConfig):这是 Cobra 提供的一个功能,用于注册一个或多个函数,在 Cobra 初始化完成后(即解析完命令行参数之后)立即执行。initConfig 函数在这里被注册,意味着每次应用程序启动且 Cobra 初始化完毕后,都会调用 initConfig 函数执行配置初始化逻辑。

initConfig():这可能包括从文件(如 YAML、JSON、环境变量或命令行标志)中读取配置信息,设置日志级别,初始化数据库连接或其他任何应用程序启动时需要准备的设置。