我在
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
类型的旗帜。有没有办法以用户友好的方式防止这种情况发生?
传递带有布尔值的标志时,您可以使用 --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。