Maison >développement back-end >Golang >Pouvez-vous spécifier des paramètres facultatifs pour les indicateurs dans Cobra ?

Pouvez-vous spécifier des paramètres facultatifs pour les indicateurs dans Cobra ?

王林
王林avant
2024-02-13 08:40:08862parcourir

您可以为 Cobra 中的标志指定可选参数吗?

L'éditeur php Zimo a répondu : Oui, vous pouvez spécifier des paramètres facultatifs pour les drapeaux dans Cobra. Cobra est un puissant outil de ligne de commande permettant de créer des applications PHP élégantes. Vous pouvez spécifier des paramètres facultatifs pour une commande Cobra en ajoutant des crochets ([]) après le drapeau. Cela permet à l'utilisateur de fournir éventuellement des informations supplémentaires ou des options de configuration selon ses besoins. L'utilisation de paramètres facultatifs peut augmenter la flexibilité et l'adaptabilité du programme et offrir aux utilisateurs une meilleure expérience.

Contenu de la question

Supposons que j'ai ce drapeau dans mon programme et qu'il n'imprime que des nombres positifs :

c.PersistentFlags().IntVar(&SomeFlag, optionSomeFlag, 0, "做某事(范围: x-y)")

La valeur par défaut est 0, donc si l'utilisateur ne bascule pas le drapeau, rien ne sera imprimé. Comment faire en sorte qu'un indicateur accepte des paramètres mais ait lui-même une valeur par défaut ? c'est-à-dire si la valeur par défaut est 5

./program --someflag 输出将是 5

Mais si je le faisais

./program --someflag=1 输出将为 1

J'essaie de suivre le guide de l'utilisateur de Cobra et je m'attendais à avoir un type de commande qui me permettrait de spécifier une valeur par défaut uniquement lorsque l'utilisateur déclenche l'indicateur, plutôt que de simplement spécifier entièrement une valeur par défaut. J'ai peut-être mal compris ou raté quelque chose.

La solution

peut être effectuée en utilisant nooptdefval

rootcmd.persistentflags().lookup("someflag").nooptdefval = "5"

Dans le code ci-dessous, vous pouvez trouver un exemple complet d'application en ligne de commande avec cobra qui a le comportement que vous décrivez

package main

import (
    "fmt"
    "github.com/spf13/cobra"
)

func main() {
    var someflag int
    var defaultsomeflag = "5"

    // create the root command.
    rootcmd := &cobra.command{
        use:   "program",
        short: "a brief description of your application",
        long:  "a longer description of your application",
        run: func(cmd *cobra.command, args []string) {
            // check whether the flag was explicitly set.
            if cmd.flags().lookup("someflag").changed {
                fmt.printf("someflag: %d\n", someflag)
            } else {
                // if the flag was not explicitly set don't print a value.
                fmt.printf("someflag is not set\n")
            }
        },
    }

    // define the flag and set its default value.
    rootcmd.persistentflags().intvar(&someflag, "someflag", 0, "do something (range: x-y)")
    rootcmd.persistentflags().lookup("someflag").nooptdefval = defaultsomeflag

    // execute the root command.
    if err := rootcmd.execute(); err != nil {
        fmt.println(err)
    }
}

Voici les résultats d'exécution de différentes valeurs d'indicateur.

$ ./test
someflag is not set
$ ./test --someflag
someflag: 5
$ ./test --someflag=3
someflag: 3

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