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

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

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

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


root.go文件

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

import (
    "fmt"
    "os"
    "github.com/spf13/cobra"
)

var rootCmd = &cobra.Command{
    Use: "app", //命令名称
    Short: "这里写简短的命令描述", 
    Long: `这里写较长的命令描述`, 
    Run: func(cmd *cobra.Command, args []string) { //当执行命令时会调用此函数
        fmt.Println("app hugo...") 
    },
}

func Execute() { //启动命令行应用程序并执行用户指定的命令
    if err := rootCmd.Execute(); err != nil {
       fmt.Println(err)
       os.Exit(1)
    }
}



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

package main

import (
    "app/cmd"
)

func main() {
    cmd.Execute()
}

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

编译 go build -o app

执行命令 ./app

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

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


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

var clientCmd = &cobra.Command{ 
    Use: "client", 
    Short: "start client of app", 
    Run: func(cmd *cobra.Command, args []string) { 
        fmt.Println("client start...") 
    }, 
} 

func init() { 
    rootCmd.AddCommand(versionCmd) //添加子命令
}

编译 go build -o app

执行命令 ./app client

执行了Run函数中的代码


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

func init() {
    cobra.OnInitialize(initConfig)
}

func initConfig() {
    //在这里添加配置初始化的代码
}

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

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

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐