gpt4 book ai didi

go - 在 GoLang 中定义独立的标志集

转载 作者:IT老高 更新时间:2023-10-28 13:02:34 28 4
gpt4 key购买 nike

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 -applycmd -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)
}
}

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

关于go - 在 GoLang 中定义独立的标志集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24504024/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com