Heim  >  Artikel  >  Backend-Entwicklung  >  Golang Cobra mehrere Flaggen ohne Wert

Golang Cobra mehrere Flaggen ohne Wert

WBOY
WBOYnach vorne
2024-02-05 23:00:14572Durchsuche

Golang Cobra 多个标志没有值

Frageninhalt

Ich bin neu bei Golang und probiere meine erste CLI-Anwendung mit dem Cobra-Framework aus.

Mein Plan ist es, wenige Befehle und viele Flags zu verwenden. An diese Flags muss kein Wert angehängt werden, da sie einfach mit -r verwendet werden können, um das Gerät neu zu starten.

Derzeit funktioniert bei mir Folgendes, aber ich denke ständig, dass dies nicht der richtige Weg ist. Daher ist jede Hilfe sehr willkommen.

Die aktuelle Logik besteht darin, dass an jeden Befehl ein Standardwert angehängt wird und ich dann im Ausführungsbefehl nach diesem Wert suche und meine Funktion auslöse, nachdem ich ihn erfasst habe.

Mein „Arbeitscode“ sieht wie folgt aus.

Meine Init-Funktion enthält den folgenden Inhalt im Befehl.

chargercmd.flags().stringp("updatefirmware", "u", "", "updeates the firmware of the charger")
    chargercmd.flags().lookup("updatefirmware").nooptdefval = "yes"
    chargercmd.flags().stringp("reboot", "r", "", "reboots the charger")
    chargercmd.flags().lookup("reboot").nooptdefval = "yes"

Der laufende Teil ist unten dargestellt.

Run: func(cmd *cobra.Command, args []string) {
        input, _ := cmd.Flags().GetString("UpdateFirmware")
        if input == "yes" {
            fmt.Println("Updating firmware")
            UpdateFirmware(os.Getenv("Test"), os.Getenv("Test2")) 
        }
        input, _ = cmd.Flags().GetString("reboot")
        if input == "yes" {
            fmt.Println("Rebooting Charger")
        }
    },

Richtige Antwort


Vielleicht um die Verwendung etwas klarer zu machen, wie in Buraks Kommentar erwähnt – Sie können besser zwischen Befehlen und Flags unterscheiden. Mit Cobra können Sie einen Root-Befehl und Unterbefehle an den Root-Befehl anhängen. Darüber hinaus kann jeder Befehl Flags akzeptieren.

In Ihrem Fall charger 是根命令,您需要两个子命令:update_firmwarereboot.

Als Beispiel für den Neustart des Ladegeräts würden Sie den folgenden Befehl ausführen:

$ charger reboot

Im obigen Code versuchen Sie, den Unterbefehl als Flag zu definieren, was zwar möglich, aber wahrscheinlich keine gute Vorgehensweise ist.

Stattdessen sollte das Projekt wie folgt eingerichtet werden: https://github.com/hesamchobanlou/stackoverflow/tree/main/74934087

Sie können dann die Aktion updatefirmware(...) in die entsprechende Befehlsdefinition unter cmd/update_firmware.go verschieben, anstatt zu versuchen, jede Flag-Variante im Root-Charger-CMD zu überprüfen.

Wenn dies nicht hilft, geben Sie bitte weitere Einzelheiten dazu an, warum Ihr Ansatz Ihrer Meinung nach möglicherweise nicht richtig ist.

Das obige ist der detaillierte Inhalt vonGolang Cobra mehrere Flaggen ohne Wert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen