简介
Cobra 是 Go 的 CLI 框架。它包含一个用于创建强大的现代 CLI 应用程序的库,以及一个用于快速生成基于 Cobra 的应用程序和命令文件的工具。
它由 Golang 团队成员 spf13 为 hugo 创建,并被最受欢迎的 Golang 项目采用。
Cobra 官方文档 https://cobra.dev/
Cobra 推荐的项目结构
1
2
3
4
5
6
|
appName
cmd
cmd1.go
cmd2.go
cmd3.go
main.go
|
1
2
3
4
5
6
7
8
9
|
package main
import (
"{pathToYourApp}/cmd"
)
func main() {
cmd.Execute()
}
|
Cobra 代码示例
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
|
// root cmd
package cmd
import (
"fmt"
"log"
"github.com/spf13/cobra"
)
func init() {
rootCmd.AddCommand(addCmd, versionCmd) // 追加指令
}
var rootCmd = &cobra.Command{
Use: "example",
Short: "Example is an example of cobra",
Long: `This is a full description of the command Example`,
Run: func(cmd *cobra.Command, args []string) {
// Do Stuff Here
fmt.Println("run root cmd")
},
}
func Execute() {
if err := rootCmd.Execute(); err != nil {
log.Fatalln(err)
}
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
// Version CMD
package cmd
import (
"fmt"
"github.com/spf13/cobra"
)
var versionCmd = &cobra.Command{
Use: "version",
Short: "Example version",
Long: `This is the version of example`,
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("V1.0.0")
},
}
|
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
|
// Add CMD
package cmd
import (
"fmt"
"log"
"strconv"
"github.com/spf13/cobra"
)
var addCmd = &cobra.Command{
Use: "add",
Short: "Add two values",
Long: "Get the sum of two values",
Args: cobra.MinimumNArgs(2), // 最少两个参数
Run: func(cmd *cobra.Command, args []string) {
a, err := strconv.Atoi(args[0])
if err != nil {
log.Fatalln(err)
}
b, err := strconv.Atoi(args[1])
if err != nil {
log.Fatalln(err)
}
fmt.Println(a + b)
},
}
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// print name CMD
package cmd
import (
"fmt"
"github.com/spf13/cobra"
)
var name string // 自定义命名参数
var printCmd = &cobra.Command{
Use: "print",
Short: "Print name",
Long: "Print custom name",
Run: func(cmd *cobra.Command, args []string) {
fmt.Println("Custome name:", name)
},
}
func init() {
// 参数 名称 别名 默认值 参数说明
printCmd.Flags().StringVarP(&name, "name", "n", "", "print name")
}
|