需要制作眼镜蛇命令标志

  • 本文关键字:命令 标志 眼镜蛇 go
  • 更新时间 :
  • 英文 :


我创建了一个cobra命令并添加了一个标志:

cmd.Flags().StringVarP(&primaryIP, "primary-ip", "p", "", "Help text")

除了自己检查值并返回错误之外,是否有一种方法可以使其必需?

几个月前,这种行为在cobra中被更改,尽管文档对此不是很清楚。现在,如果您将一个标志标记为MarkFlagRequired("primary-ip"),并且您没有提供这样的标志,那么运行该命令将打印help +

required flag(s) "primary-ip"
exit status 1

晚了,但我希望这对你有帮助!

首先,我们需要知道cobra定义了两种类型的标志。

持久标志:它们将对命令及其下的每个子命令可用。

本地标志:它们只对定义它们的特定命令可用。


因此,cobra提供了两种方法来根据标志的类型生成所需的标志。

在命令的init函数上,它可以是root或任何其他命令或子命令。让我们创建一个名为my-cmd的cli应用程序,并使用名为xD sub-command

的子命令
// root.go file
var Foo bool
func init() {
    cobra.OnInitialize(initConfig)
    // define required persistent flag
    myCmd.PersistentFlags().BoolVarP(&Foo, "foo", "f", false, "set foo (*)")
    myCmd.MarkPersistentFlagRequired("foo")
}
// subCommand.go file
var Bar string
func init() {
    // just add subCmd as a sub-command of my-cmd
    myCmd.AddCommand(subCmd)
    // define required local flag
    subCmd.Flags().StringVarP(&Bar, "bar", "b", "", "set bar (*)")
    subCmd.MarkFlagRequired("bar")
}

当你在CLI中调用命令时

# if you don't pass a value for 'foo' flag
> my-cmd
    required flag(s) "foo" not set
    exit status 1
# here you must pass a value for 'foo' because is persistent as well as 'bar' because is local for sub-cmd
> my-cmd sub-cmd
    required flag(s) "foo", "bar" not set
    exit status 1

不,你必须自己检查你的程序输入是否正确。

注意,这是有意义的,因为您可能希望同时检查输入是否正确。在您的示例中,您应该检查输入是否存在,以及输入是否为有效的ip地址。

cmd.Flags().StringVarP(&var, "var", "r", "", "")
cmd.MarkFlagRequired("var")

最新更新