加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-16 19:20:32 所属栏目:大数据 来源:网络整理
导读: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来做到这一点.当我定义两个F
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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读