Maison > développement back-end > Golang > le corps du texte

Golang Cobra plusieurs drapeaux sans valeur

WBOY
Libérer: 2024-02-05 23:00:14
avant
515 Les gens l'ont consulté

Golang Cobra 多个标志没有值

Contenu de la question

Je suis nouveau sur Golang et j'essaie ma première application cli utilisant le framework cobra.

Mon plan est d'utiliser peu de commandes et d'utiliser de nombreux indicateurs. Il n'est pas nécessaire d'ajouter une valeur à ces indicateurs car ils peuvent simplement être utilisés avec -r pour redémarrer le périphérique.

Actuellement, les éléments suivants fonctionnent, mais j'ai pensé que ce n'était pas la bonne façon de le faire. Toute aide est donc grandement appréciée.

La logique actuelle est que chaque commande est ajoutée à une valeur par défaut, puis je recherche cette valeur dans la commande d'exécution et déclenche ma fonction après l'avoir capturée.

Mon "code de travail" ressemble à ci-dessous.

Ma fonction init contient le contenu suivant dans la commande.

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"
Copier après la connexion

La partie courante est présentée ci-dessous.

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")
        }
    },
Copier après la connexion


Réponse correcte


Peut-être pour rendre l'utilisation un peu plus claire, comme mentionné dans le commentaire de burak - vous pouvez mieux différencier les commandes et les drapeaux. Avec cobra, vous pouvez avoir une commande racine et des sous-commandes attachées à la commande racine. De plus, chaque commande peut accepter des indicateurs.

Dans votre cas, charger 是根命令,您需要两个子命令:update_firmwarereboot.

À titre d'exemple de redémarrage du chargeur, vous exécuteriez la commande :

$ charger reboot
Copier après la connexion

Dans le code ci-dessus, vous essayez de définir la sous-commande comme un indicateur, ce qui est possible mais probablement pas une bonne pratique.

Au lieu de cela, le projet devrait être mis en place comme suit : https://github.com/hesamchobanlou/stackoverflow/tree/main/74934087

Vous pouvez ensuite déplacer l'action updatefirmware(...) dans la définition de commande correspondante sous cmd/update_firmware.go au lieu d'essayer de vérifier chaque variante d'indicateur sur le chargercmd racine.

Si cela ne vous aide pas, veuillez fournir plus de détails sur les raisons pour lesquelles vous pensez que votre approche n'est peut-être pas correcte ?

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!