小编典典

在GoLang中定义独立的标志集

go

Go文档(http://golang.org/pkg/flag/)表示:

FlagSet类型允许人们定义独立的标志集,例如在命令行界面中实现子命令。

我需要此功能,但我不知道如何说服国旗pkg做到这一点。当我定义两个FlagSet时,如果命令行中有用于第二个标志的标志,则解析其中一个标志将给我错误和警告。例:

f1 := flag.NewFlagSet("f1", flag.ContinueOnError)
apply := f1.Bool("apply", false, "")
silent := f1.Bool("silent", false, "")
if err := f1.Parse(os.Args[1:]); err == nil {
    fmt.Println(*apply, *silent)
}
f2 := flag.NewFlagSet("f2", flag.ContinueOnError)
reset := f2.Bool("reset", false, "")
if err := f2.Parse(os.Args[1:]); err == nil {
    fmt.Println(*reset)
}

如果尝试执行cmd -applyOR,我会收到各种各样的警告cmd -reset。我想将这些FlagSet分开,因为我只想为-silent工作-apply

我想念什么?


阅读 306

收藏
2020-07-02

共1个答案

小编典典

您首先要在子命令之间进行区分,然后Parse在右侧进行调用FlagSet

f1 := flag.NewFlagSet("f1", flag.ContinueOnError)
silent := f1.Bool("silent", false, "")
f2 := flag.NewFlagSet("f2", flag.ContinueOnError)
loud := f2.Bool("loud", false, "")

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

2020-07-02