确定是否在 golang cobra/viper 的(子)命令调用中实际传递了标志
Determine if flags were actually passed in (sub)command invocation in golang's cobra/viper
我有一个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
如果设置了标志,或者如果使用了默认值,那应该 return。
我有一个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
如果设置了标志,或者如果使用了默认值,那应该 return。