Golang: cobra

cobra 可以用来建立CLI,即命令行工具。


基本用法


首先,创建工作目录,目录名与我们将要建立的命令行工具名称一致:

mkdir test-cobra
然后创建 main.go 文件:
package main


import "k8s.io/learning/test-cobra/cmd"


func main() {
        cmd.Execute()
}

创建 cmd 文件夹以及 cmd/root.go, 实现 root 命令:

package cmd


import (
        "fmt"
        "os"


        "github.com/spf13/cobra"
)


var rootCmd = &cobra.Command{
        Use:   "test-cobra",
        Short: "Test cobra",
        Long:  `An application created for learning and testing cobra.`,
        Run: func(cmd *cobra.Command, args []string) {
                fmt.Println("Testing Cobra...")
        },
}




func Execute() {
        if err := rootCmd.Execute(); err != nil {
                fmt.Println(err)
                os.Exit(1)
        }
}

一个基本的基于 cobra 的 CLI 就创建完成了。

 

测试 CLI


编译生成可执行文件:

go build
编译完成后,在当前目录下生成了可执行文件 test-coba, 直接运行:
./test-cobra
 Testing Cobra...
cobra 同时创建了help 命令:
./test-cobra -h
 
 An application created for learning and testing cobra.


Usage:
  test-cobra [flags]


Flags:
  -h, --help   help for test-cobra


创建子命令


在 cmd 文件夹下创建 cmd/version.go, 实现子命令 version:

package cmd

import (
        "fmt"

        "github.com/spf13/cobra"
)

func init() {
        rootCmd.AddCommand(versionCmd)
}

var versionCmd = &cobra.Command{
        Use:   "version",
        Short: "Vrsion",
        Long:  `Print current version.`,
        Run: func(cmd *cobra.Command, args []string) {
                fmt.Println("v0.1.0")
        },
}

重新编译后再次执行 help,可以得到:
./test-cobra help
An application created for learning and testing cobra.

Usage:
  test-cobra [flags]
  test-cobra [command]

Available Commands:
  help        Help about any command
  version     Vrsion

Flags:
  -h, --help   help for test-cobra
执行子命令 version:
./test-cobra version
v0.1.0


参考文献:


1. https://12factor.net/zh_cn/

2. https://github.com/spf13/cobra
3. https://github.com/spf13/cobra/blob/master/cobra/README.md

你可能感兴趣的:(golang)