在GoLang中定义独立标志集 [英] Defining Independent FlagSets in GoLang
问题描述
Go文档( http://golang.org/pkg/flag/ )说:
FlagSet类型允许定义独立的标志集,例如在命令行界面中实现子命令。
The FlagSet type allows one to define independent sets of flags, such as to implement subcommands in a command-line interface.
我需要这个功能,但我不知道如何说服pkg的标志。当我定义两个FlagSet,解析其中一个将给我错误和警告,如果命令行有第二个标志。示例:
I need this functionality but I can't figure out how to persuade the flag pkg to do it. When I define two FlagSets, parsing one of them will give me errors and warnings if the commandline has flags that are meant for the second one. Example:
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 -apply
或 cmd -reset
,我会收到各种警告。我想把这些FlagSets分开,因为我只想让 -silent
为 -apply
工作。
I get all sorts of warnings if I try to do cmd -apply
OR cmd -reset
. I want to keep these FlagSets separate because I want to only have -silent
work for -apply
.
我缺少什么?
推荐答案
您首先要区分子命令,然后在右侧 FlagSet
上调用 Parse
。
You are meant to distinguish between subcommands first, and then call Parse
on the right 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
这篇关于在GoLang中定义独立标志集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!