cobra 入门

任何一个知识点如果深入学习都是有很多值得深思的地方,kubectl是一个再简单不过的工具,但是它里面引用的一些第三方的包却有很值得考究,第一个是cobra。
举个例子 pkg/kubectl/cmd/exec.go


func NewCmdExec(f cmdutil.Factory, streams genericclioptions.IOStreams) *cobra.Command {
    options := &ExecOptions{
        StreamOptions: StreamOptions{
            IOStreams: streams,
        },

        Executor: &DefaultRemoteExecutor{},
    }
    cmd := &cobra.Command{
        Use: "exec POD [-c CONTAINER] -- COMMAND [args...]",
        DisableFlagsInUseLine: true,
        Short:   i18n.T("Execute a command in a container"),
        Long:    "Execute a command in a container.",
        Example: exec_example,
        Run: func(cmd *cobra.Command, args []string) {
            argsLenAtDash := cmd.ArgsLenAtDash()
            cmdutil.CheckErr(options.Complete(f, cmd, args, argsLenAtDash))
            cmdutil.CheckErr(options.Validate())
            cmdutil.CheckErr(options.Run())
        },
    }
    cmd.Flags().StringVarP(&options.PodName, "pod", "p", options.PodName, "Pod name")
    // TODO support UID
    cmd.Flags().StringVarP(&options.ContainerName, "container", "c", options.ContainerName, "Container name. If omitted, the first container in the pod will be chosen")
    cmd.Flags().BoolVarP(&options.Stdin, "stdin", "i", options.Stdin, "Pass stdin to the container")
    cmd.Flags().BoolVarP(&options.TTY, "tty", "t", options.TTY, "Stdin is a TTY")
    return cmd
}

kubectl的exec命令就是通过cobra实现的,当前kubectl其他的命令也是通过cobra实现的。其实是docker 先使用的cobra的,之前docker的所有命令都是通过cobra实现的。回到正题,下面介绍cobra,通过官方文档
安装

go get -u github.com/spf13/cobra/cobra

使用的方式是: APPNAME COMMAND ARG –FLAG
APPNAME就是你开发应用的名称,譬如docker、 kubectl
COMMAND 就是命令 ,譬如 get
ARG 是参数 譬如ID
FLAG 是标志位

hugo server --port=1313

server 是COMMAND port 是FLAG

下面通过代码看看如果使用,还是官方例子,
在项目的目录下执行

cobra init 会自动创建main.go
cobra add add 添加一个add的命令
cobra add del 添加一个del的命令
cobra add mm  添加一个mm的命令

编译就可以直接运行,不需要一行代码

./appc -h
  add         A brief description of your command
  del         A brief description of your command
  help        Help about any command
  mm          A brief description of your command

如果执行命令
 ./appc add
add called

是不是很方便。
回到kubectl上面,它也是充分利用了这个工具包。

你可能感兴趣的:(golang)