Golang 将标志解释为传递给另一个标志的值

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

我在

cobra
命令中设置了以下标志

    varsCmd.PersistentFlags().BoolP("secrets", "", false, usageMsgFlagEnvsVarsSecrets)
    varsCmd.PersistentFlags().BoolP("non-secrets", "", false, usageMsgFlagEnvsVarsNonSecrets)

然后我创建一个子命令

setCmd.Flags().StringSliceP("from-literal", "l", []string{}, usageMsgFlagEnvsSetFromLiteral)
varsCmd.AddCommand(compareVarsCmd, getCmd, setCmd)

setCmd
的用法是
set
varsCmd
的用法是
vars

另外,

setCmd
有:

Args: cobra.ExactArgs(1),

当我调用我的程序时

go run cli/main.go env vars set argument --from-literal --non-secrets --secrets

我看到

--from-literal
的值是
[--non-secrets]

我假设这是因为

--from-literal
StringSlice
类型的旗帜。有没有办法以用户友好的方式防止这种情况发生?

go command-line-interface viper-go cobra
1个回答
0
投票

传递带有布尔值的标志时,您可以使用 --flag=true 或 --flag=false 格式来显式设置值。

例如,要将 --secrets 和 --non-secrets 标志传递为 true,您可以使用:

go run cli/main.go env vars set argument --from-literal --non-secrets=true --secrets=true

这将确保正确设置值,而不会被 --from-literal 标志覆盖。

如果你想让它更人性化,你可以考虑为--non-secrets和--secrets添加一个简写标志,比如分别是-n和-s,然后更新你的代码来处理这些简写标志作为布尔值。这样,用户可以将标志作为 --secrets 或 -s 传递,而不必使用 --secrets=true。

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