制作眼镜蛇命令标志

时间:2016-06-29 16:58:32

标签: go

我创建了一个眼镜蛇命令并添加了一个标志:

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

除了自己检查值并返回错误之外,有没有办法让它成为必需的?

4 个答案:

答案 0 :(得分:15)

几个月前,cobra中的这种行为发生了变化,尽管文档对此并不十分清楚。现在,如果您将标记标记为MarkFlagRequired("primary-ip")并且您没有提供此类标记,则运行该命令将打印帮助以及

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

在说明缺少必需标志的末尾。

答案 1 :(得分:3)

不,您必须检查自己的输入是否适合您的程序。

请注意,这是有道理的,因为您可能想要同时检查输入是否正确。在您的示例中,您应检查输入是否存在以及输入是否为有效的IP地址。

答案 2 :(得分:3)

但是我希望这对您有帮助!

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

Persistent flags :该命令及其下的每个子命令都可以使用它们。

Local flags :它们仅可用于定义它们的特定命令。


因此cobra提供了两种方法来制作有关标志类型所需的标志。

在命令的init功能上,它可以是root或任何其他命令或子命令。让我们用名为xD my-cmd

的子命令创建一个名为sub-command的cli应用程序
// 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

答案 3 :(得分:1)

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