Cobra.dev帮你快速实现golang命令行工具

Cobra.dev 是一个关于 Go 语言的 CLI 框架。它包含一个用于创建强大、现代化的命令行应用程序的库,以及一个用于快速生成基于 Cobra 的应用程序和命令文件的工具。Cobra 由 Go 团队成员 spf13 为 Hugo 创建,并被最流行的 Go 项目所采用。

Cobra 提供以下功能:

  • 基于子命令的 CLI:例如 app serverapp fetch 等。
  • 完全符合 POSIX 标准的标志参数(包括短标志和长标志)。
  • 嵌套的子命令。
  • 全局、局部和级联的标志参数。
  • 使用 cobra init appnamecobra add cmdname 可以轻松生成应用程序和命令。
  • 智能建议(例如 app srver... 你是不是想输入 app server?)。
  • 对命令和标志参数自动生成帮助文档。
  • -h--help 等标志参数自动识别为帮助标志。
  • 为应用程序自动生成 Bash 自动补全。
  • 为应用程序自动生成 man 页面。
  • 命令别名,可以在不破坏现有命令的情况下更改命令。
  • 灵活定义自己的帮助文档、用法等。
  • 可选与 viper 紧密集成,用于支持 12 因素应用程序。

安装:

使用 Cobra 很简单。首先,使用 go get 安装最新版本的库。以下命令将安装 Cobra 生成器可执行文件,以及库和其依赖项:

bash 复制代码
go get -u github.com/spf13/cobra/cobra

然后,在你的应用程序中引入 Cobra:

bash 复制代码
import "github.com/spf13/cobra"

概念:

Cobra 基于命令、参数和标志参数的结构构建。命令表示操作,参数表示对象,标志参数表示对这些操作的修改。优秀的应用程序在使用时应该像句子一样可读。用户应该能够自然而然地理解如何使用应用程序。遵循的模式是:

Copy

bash 复制代码
APPNAME VERB NOUN --ADJECTIVE

或者

bash 复制代码
APPNAME COMMAND ARG --FLAG

以下是一些现实世界的示例。在下面的示例中,server 是一个命令,port 是一个标志参数:

bash 复制代码
hugo server --port=1313

在这个命令中,我们告诉 Git 克隆该 URL 的裸库:

bash 复制代码
git clone URL --bare

命令:

命令是应用程序的核心点。应用程序支持的每个交互都将包含在一个命令中。一个命令可以有子命令,并可选择运行一个操作。在上面的示例中,server 是一个命令。

关于 cobra.Command 的更多信息,请参阅文档。

标志参数:

标志参数是修改命令行行为的一种方式。Cobra 支持完全符合 POSIX 标准的标志参数,以及 Go flag 包的标志参数。Cobra 命令可以定义在子命令中持久存在的标志参数,以及仅对该命令可用的标志参数。在上面的示例中,port 是一个标志参数。标志参数的功能由 pflag 库提供,它是标准库 flag 的一个分支,保持相同的接口,并添加了 POSIX 的兼容性。

开始使用:

在使用 Cobra 构建的应用程序中,通常会遵循以下组织结构:

go 复制代码
▾ appName/
  ▾ cmd/
      add.go
      your.go
      commands.go
      here.go
    main.go

在 Cobra 应用时,你需要创建一个根命令和相应的子命令。以下是一个示例:

go 复制代码
package main

import (
	"fmt"

	"github.com/spf13/cobra"
)

func main() {
	rootCmd := &cobra.Command{
		Use:   "app",
		Short: "一个示例应用程序",
		Long:  "这是一个示例应用程序,用于演示使用 Cobra 构建命令行应用程序。",
		Run: func(cmd *cobra.Command, args []string) {
			// 这是根命令的执行逻辑
			fmt.Println("欢迎使用示例应用程序!")
		},
	}

	// 添加子命令
	rootCmd.AddCommand(&cobra.Command{
		Use:   "server",
		Short: "启动服务器",
		Run: func(cmd *cobra.Command, args []string) {
			// 这是 server 子命令的执行逻辑
			fmt.Println("正在启动服务器...")
		},
	})

	rootCmd.Execute()
}

以上代码创建了一个名为 app 的根命令,并添加了一个名为 server 的子命令。根命令和子命令都定义了 Run 函数,用于指定命令的执行逻辑。在这个示例中,根命令的执行逻辑打印欢迎消息,而 server 子命令的执行逻辑打印正在启动服务器的消息。

你可以根据实际需求添加更多的命令和标志参数。使用 cobra.Commandcobra.Flag 类型的方法可以定义命令和标志参数的属性和行为。

相关推荐
进朱者赤2 小时前
Go 语言常用工具方法总结
golang·go
写bug写bug3 小时前
理解Go语言中的切片
后端·go
蜗牛丨1 天前
Go Vue3 CMS管理后台(前后端分离模式)
mysql·docker·go·vue3·axios·gin·jwt·分页·跨域·ant design vue·log·gorm·otp动态码登录·validator·模型绑定·权限判断
yuguo.im2 天前
Dkron 架构与设计
架构·golang·go·dkron
桃园码工3 天前
2-测试bigcache做进程内缓存 --开源项目obtain_data测试
vscode·mysql·go·postman
ZQDesigned4 天前
在 Windows 和 macOS 上配置 Golang 语言环境
后端·go
楽码4 天前
只需一文:了解validator标签以轻松验证
后端·安全·go
煎鱼eddycjy5 天前
新提案:由迭代器启发的 Go 错误函数处理
go
煎鱼eddycjy5 天前
Go 语言十五周年!权力交接、回顾与展望
go