命令行 – 在GoLang中定义独立的FlagSets

前端之家收集整理的这篇文章主要介绍了命令行 – 在GoLang中定义独立的FlagSets前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
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)
    }
}

http://play.golang.org/p/eaEEx_EReX

猜你在找的Go相关文章