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 类型的方法可以定义命令和标志参数的属性和行为。

相关推荐
用户2237209117724 小时前
Go微服务精讲:Go-Zero全流程实战即时通讯
go
嘿嘿7 小时前
Grafana 快速搭建go-metrics 仪表盘备忘
后端·docker·go
烛阴11 小时前
Go 语言进阶必学:&^ 操作符,高效清零的秘密武器!
后端·go
Pandaconda1 天前
【Golang 面试题】每日 3 题(四十一)
开发语言·经验分享·笔记·后端·面试·golang·go
Like_wen1 天前
【Go面试】基础八股文篇 (持续整合)
java·后端·计算机网络·面试·golang·go·八股文
Pandaconda2 天前
【Golang 面试题】每日 3 题(三十九)
开发语言·经验分享·笔记·后端·面试·golang·go
用户49824901880132 天前
VipSearchBuilder 技术文档
go
gopher_looklook2 天前
一个递归差点酿成的悲剧
go
吴佳浩3 天前
Gin 入门指南 Swagger aipfox集成
后端·go·gin
Pandaconda4 天前
【Golang 面试题】每日 3 题(三十六)
开发语言·经验分享·笔记·后端·面试·golang·go