Go文档(
http://golang.org/pkg/flag/)说:
The FlagSet type allows one to define independent sets of flags,such as to implement subcommands in a command-line interface.
我需要这个功能,但是我无法弄清楚如何劝说标记pkg来做到这一点.当我定义两个FlagSets时,解析其中的一个会给我错误和警告,如果命令行具有第二个标志.例:
f1 := flag.NewFlagSet("f1",flag.ContinueOnError) apply := f1.Bool("apply",false,"") silent := f1.Bool("silent","") if err := f1.Parse(os.Args[1:]); err == nil { fmt.Println(*apply,*silent) } f2 := flag.NewFlagSet("f2",flag.ContinueOnError) reset := f2.Bool("reset","") if err := f2.Parse(os.Args[1:]); err == nil { fmt.Println(*reset) }
如果我尝试执行cmd -opply OR cmd -reset,我会收到各种警告.我想保持这些FlagSets是分开的,因为我想只有-silent工作的应用程序.
我失踪了什么
您首先要区分子命令,然后在右侧的FlagSet上调用Parse.
f1 := flag.NewFlagSet("f1",flag.ContinueOnError) silent := f1.Bool("silent","") f2 := flag.NewFlagSet("f2",flag.ContinueOnError) loud := f2.Bool("loud","") switch os.Args[1] { case "apply": if err := f1.Parse(os.Args[2:]); err == nil { fmt.Println("apply",*silent) } case "reset": if err := f2.Parse(os.Args[2:]); err == nil { fmt.Println("reset",*loud) } }