我有一个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
如果设置了标志,或者使用了默认值,则应返回该值。