golang cobra应用程序管理

cobra介绍

Cobra既是用于创建功能强大的现代CLI应用程序的库,又是用于生成应用程序和命令文件的程序。

Cobra被用于许多Go项目中,例如Kubernetes, Hugo和Github CLI等。此列表包含使用Cobra的项目的更广泛的列表

Cobra是一个提供简单界面的库,用于创建功能强大的现代CLI界面,类似于git&go工具。

Cobra还是一个应用程序,它将生成您的应用程序框架以快速开发基于Cobra的应用程序。

Cobra提供:

  • 简单易用的基于子-的CLI: ,app server,app fetch等。
  • 完全兼容POSIX的标志(包括短版和长版)
  • 嵌套子命令
  • 全局,局部和级联标志
  • 易产生的应用程序和命令与cobra init appname&cobra add cmdname
  • 明智的建议(app srver……是您的意思app server吗?)
  • 自动生成命令和标志的帮助
  • 自动帮助标志识别-h,–help等等。
  • 为您的应用程序自动生成的bash自动完成
  • 为您的应用程序自动生成的手册页
  • 命令别名,因此您可以更改内容而不会破坏它们
  • 定义自己的帮助,用法等的灵活性。
  • 可选与viper紧密集成,可用于12因子应用程序

安装cobra

安装cobra后会在GOPATH/bin目录下创建cobra可执行文件

1
go get github.com/spf13/cobra/cobra

初始化cobra项目

参考文档:

Cobra提供了自己的程序,该程序将创建您的应用程序并添加所需的任何命令。这是将Cobra集成到您的应用程序中的最简单方法。

参考:

1
2
mkdir -p newApp && cd newApp
cobra init --pkg-name github.com/spf13/newApp

实例

1
2
3
mkdir startApp
cd startAapp
cobra init --pkg-name startApp

添加命令

初始化应用程序后,Cobra可以为您创建其他命令。假设您创建了一个应用,并且想要以下命令:

  • 应用配置
  • 应用运行
  • 应用停止
1
2
3
4
5
6
7
8
E:\GoWorks\src\startApp>cobra add config
config created at E:\GoWorks\src\startApp

E:\GoWorks\src\startApp>cobra add run
run created at E:\GoWorks\src\startApp

E:\GoWorks\src\startApp>cobra add stop
stop created at E:\GoWorks\src\startApp

编译

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
E:\GoWorks\src\startApp>go mod init
go: creating new go.mod: module startApp

E:\GoWorks\src\startApp>go build
go: finding github.com/spf13/viper v1.7.0
go: downloading github.com/spf13/viper v1.7.0
go: extracting github.com/spf13/viper v1.7.0
go: downloading gopkg.in/yaml.v2 v2.2.4
go: downloading github.com/subosito/gotenv v1.2.0
go: downloading github.com/magiconair/properties v1.8.1
go: downloading golang.org/x/text v0.3.2
go: downloading gopkg.in/ini.v1 v1.51.0
go: extracting github.com/subosito/gotenv v1.2.0
go: extracting gopkg.in/yaml.v2 v2.2.4
go: extracting github.com/magiconair/properties v1.8.1
go: extracting gopkg.in/ini.v1 v1.51.0
go: extracting golang.org/x/text v0.3.2
go: finding github.com/magiconair/properties v1.8.1
go: finding golang.org/x/text v0.3.2
go: finding github.com/subosito/gotenv v1.2.0
go: finding gopkg.in/ini.v1 v1.51.0
go: finding gopkg.in/yaml.v2 v2.2.4


E:\GoWorks\src\startApp>startApp.exe //执行程序
A longer description that spans multiple lines and likely contains
examples and usage of using your application. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.

Usage:
startApp [command]

Available Commands:
config A brief description of your command //可以看到新加的config命令
help Help about any command
run A brief description of your command
stop A brief description of your command

Flags:
--config string config file (default is $HOME/.startApp.yaml)
-h, --help help for startApp
-t, --toggle Help message for toggle

Use "startApp [command] --help" for more information about a command.

E:\GoWorks\src\startApp>

为命令添加功能

默认情况下,每个命令默认都添加了-h帮助信息,描述信息修改在每个cmd.go文件的Long Short提示标签下

1
2
3
4
5
6
7
8
9

var runCmd = &cobra.Command{
Use: "run",
Short: "start your app",
Long: `start`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("程序正在运行")
},
}

例:为程序添加version命令

1
2
E:\GoWorks\src\startApp>cobra add version
version created at E:\GoWorks\src\startApp

修改version.go

1
2
3
4

Run: func(cmd *cobra.Command, args []string) {
fmt.Println("version is v1.0")
},

编译并执行

1
2
3
4
E:\GoWorks\src\startApp>startApp.exe version
version is v1.0

E:\GoWorks\src\startApp>

修改程序描述

编辑cmd目录下root.go文件

1
2
3
4
5
6
7
8
var rootCmd = &cobra.Command{
Use: "startApp",
Short: "A brief description of your application",
Long: `startApp to Manager your Apps`, //修改此处
// Uncomment the following line if your bare application
// has an action associated with it:
// Run: func(cmd *cobra.Command, args []string) { },
}

参考资料: