如何为某些 Cobra 命令将某些全局持久标志标记为隐藏

Pet*_*sov 6 go go-cobra

我正在使用 Cobra 开发一些 CLI 实用程序。对于我,RootCmd我设置了一些持久标志(即也会影响所有命令的标志)。但是有些命令不使用这些标志,所以我想为这些特定命令隐藏它们,所以这些标志不会用myutil help mycmd或显示myutil mycmd --help

下面的代码片段完成了这项工作,但对我来说它有点难看而且很难维护:

func init() {
    RootCmd.PersistentFlags().StringVar(&someVar, "some-flag", "", "Nothing to see here, move along.")

    origHelpFunc := TidalCmd.HelpFunc()
    RootCmd.SetHelpFunc(func(cmd *cobra.Command, args []string) {
        if cmd.Name() == "no-flags-cmd" || (cmd.Parent() != nil && cmd.Parent().Name() == "no-flags-cmd") {
            cmd.Flags().MarkHidden("some-flag")
        }
        origHelpFunc(cmd, args)
    })
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来隐藏某些命令的一些全局持久标志?

小智 7

例外情况应适用于例外情况。

您应该覆盖/设置您想要隐藏标志的命令的帮助功能,而不是根命令。通过这种方式,您可以将自定义逻辑与命令打包在一起,这将有助于维护它。

例子:

mySubCommand := &cobra.Command{
    Use:   "no-flags-cmd [command]",
    Short: "Takes no flags for an argument",
    RunE: func(cmd *cobra.Command, args []string) error {
        return nil
    },
}

mySubCommand.SetHelpFunc(func(command *cobra.Command, strings []string) {
   // Hide flag for this command
   command.Flags().MarkHidden("some-flag")
   // Call parent help func
    command.Parent().HelpFunc()(command, strings)
})

rootCmd.AddCommand(mySubCommand)
Run Code Online (Sandbox Code Playgroud)

注意:这只是一个示例。您可能需要检查并处理任何错误。