我创建了一个眼镜蛇命令并添加了一个标志:
cmd.Flags().StringVarP(&primaryIP, "primary-ip", "p", "", "Help text")
除了自己检查值并返回错误之外,有没有办法让它成为必需的?
答案 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")