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 这样做。当我定义两个 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 -apply
或 cmd -reset
,我会收到各种警告。我想将这些标志集分开,因为我只想让 -silent
为 -apply
工作。
我错过了什么?
最佳答案
你的意思是先区分子命令,然后在右边FlagSet
调用Parse
。
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)
}
}
关于go - 在 GoLang 中定义独立的标志集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24504024/