Maison  >  Article  >  développement back-end  >  Golang Cobra plusieurs drapeaux sans valeur

Golang Cobra plusieurs drapeaux sans valeur

WBOY
WBOYavant
2024-02-05 23:00:14560parcourir

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"

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")
        }
    },

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

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer