Cobra子命令默认调用帮助

时间:2018-03-07 10:00:00

标签: go go-cobra cobra

如果没有传递参数或标志,我希望sub命令打印出Help菜单(默认情况下,main命令执行此操作)。

例如,没有任何参数或标志的主命令:

chris@pop-os:~$ ./tk
Command line application to deploy

Usage:
  tk [command]

Available Commands:
  addon       Install packages
  cluster     Used to create cloud infrastructures
  help        Help about any command

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

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

我想要子命令,例如" tk addon"如果没有输入参数或标志,也返回它自己的帮助菜单,目前它只给出一个空行。

插件代码:

var addonCmd = &cobra.Command{
    Use:   "addon",
Short: "Install addon packages",
Long: `Install additional packages`,
Run: func(cmd *cobra.Command, args []string) {

        }
    },
}

2 个答案:

答案 0 :(得分:8)

可以检查程序传递的参数数量。如果有更多0 args你会做实际工作,但如果它少,那么你只需要显示命令的“帮助”。

var addonCmd = &cobra.Command{
    Use:   "addon",
    Short: "Install addon packages",
    Long: `Install additional packages`,
    Run: func(cmd *cobra.Command, args []string) {
        if len(args) == 0 {
            cmd.Help()
            os.Exit(0)
        }
        // do actual work
    },
}

答案 1 :(得分:2)

我认为最好在PreRunE上进行处理。

var addonCmd = &cobra.Command{
    Use:   "addon",
    Short: "Install addon packages",
    Long: `Install additional packages`,
    PreRunE: func(cmd *cobra.Command, args []string) error {
        if len(args) == 0 {
            cmd.Help()
            os.Exit(0)
        }
        return nil
    },
    Run: func(cmd *cobra.Command, args []string) {
        // do actual work
    },
}