Die Go-Dokumentation (http://golang.org/pkg/flag/) sagt:definieren Unabhängige FlagSets in golang
Der FlagSet Typ eines unabhängigen Sätze von Flags definieren kann, wie zum Beispiel Unterbefehle in einem Kommandozeilen-Schnittstelle zu implementieren.
Ich brauche diese Funktionalität, aber ich kann nicht herausfinden, wie man die Flagge pkg dazu bringt, es zu tun. Wenn ich zwei FlagSets definiere, gibt mir das Parsen eines von ihnen Fehler und Warnungen, wenn die Kommandozeile Flags hat, die für das zweite bestimmt sind. Beispiel:
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)
}
ich alle Arten von Warnungen, wenn ich versuche cmd -apply
ODER cmd -reset
zu tun. Ich möchte diese FlagSets getrennt halten, da ich nur -silent
arbeiten möchte für -apply
.
Was fehlt mir?
ohne in dieses spezifische Problem zu bekommen - mich erlauben zu hoch einen hervorragenden Alternativen Flaggen-Parser empfehlen, die ich benutze (nicht meine Arbeit, ich mag es einfach). https://github.com/jessevdk/go-flags –
Das Parsen eines 'FlagSet' wird alle Optionen verbrauchen und einige nicht ignorieren. Sie müssen also vor dem Parsen eines FlagSet bestimmen, welches Sie anwenden. Wenn "reset" und "apply" ein Unterbefehl mit verschiedenen Flags sind, legen Sie fest, welcher Unterbefehl ausgeführt und dieses FlagSet parsen soll. Was du versuchst zu tun, kann nicht getan werden. – Volker