确定标志是否确实在 golang 的眼镜蛇/蝰蛇中的(子)命令调用中传递



我有一个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

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

你可以做:

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

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

相关内容

  • 没有找到相关文章

最新更新