0

我有一个cobra命令

var mycommandCmd = &cobra.Command{
    Use:   "mycommand",
    PersistentPreRunE: func(cmd *cobra.Command, args []string) error {
        viper.BindPFlags(cmd.Flags())

和一个子命令

var mysubcommandCmd = &cobra.Command{
    Use:   "mysubcommand",
    Args:  cobra.ExactArgs(1),
    RunE: func(cmd *cobra.Command, args []string) error {
        viper.BindPFlags(cmd.Flags())

我当然把它绑在一起

mycommandCmd.AddCommand(mysubcommandCmd)

我也有他们两个的标志

mycommandCmd.PersistentFlags().BoolP("foo", "", true, "Whether to foo")
mysubcommandCmd.Flags().BoolP("foobar", "", true,  "Whether to foobar")

我的问题如下:

假设最终go二进制文件名为prog,是否有一个 ( cobra/ viper) 内置方法来检查在子命令调用期间是否实际传递了任何标志?

即我如何以编程方式区分这

prog mycommand mysubcommand --foobar

还有这个

prog mycommand mysubcommand

检查默认标志值当然不起作用(并且不会根据标志编号进行缩放)

4

1 回答 1

1

你可以做:

isSet:=cmd.Flags().Lookup("foobar").Changed

如果设置了标志,或者使用了默认值,则应该返回。

于 2021-11-16T17:41:11.103 回答