确定标志是否确实在 golang 的 cobra/viper 中的(子)命令调用中传递了

问题描述 投票:0回答:1

我有一个

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

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

go go-cobra viper-go
1个回答
2
投票

你可以这样做:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.