Maison > développement back-end > Golang > Fusionner `BoolFlags` en un seul en utilisant urfave/cli in go

Fusionner `BoolFlags` en un seul en utilisant urfave/cli in go

PHPz
Libérer: 2024-02-09 17:33:08
avant
1113 Les gens l'ont consulté

使用 go 中的 urfave/cli 将 `BoolFlags` 合并为一个

L'éditeur PHP Banana est là pour vous présenter une méthode de fusion de BoolFlags en un seul en utilisant la bibliothèque urfave/cli dans le langage go. urfave/cli est une puissante bibliothèque de ligne de commande qui peut nous aider à créer des applications élégantes en ligne de commande. Dans les applications en ligne de commande, nous devons souvent gérer divers BoolFlags (drapeaux booléens), qui sont utilisés pour indiquer si certains commutateurs ou options sont activés. Mais quand il y a beaucoup de BoolFlags, le code devient verbeux et difficile à maintenir. En utilisant urfave/cli, nous pouvons facilement fusionner plusieurs BoolFlags en un seul, rendant le code plus concis et plus facile à comprendre. Examinons ensuite la méthode d'implémentation spécifique.

Contenu de la question

J'ai un code à obtenir -f/--foo-b/--bar 的参数。参数解析是通过 urfave/cli 包完成的,这是第二个最流行的 go 参数解析器。我可以像 go run 一样运行我的程序。 -f -b 但不像 go run 。 -fb Existe-t-il un moyen de le faire fonctionner avec go run 一起工作。 -fb en utilisant urfave/cli ? Si ce n'est pas possible, quel module go rendrait cela possible ?

Code :

package main

import (
    "fmt"
    "log"
    "os"

    "github.com/urfave/cli/v2"
)

func main() {
    var foo_count, bar_count bool

    app := &cli.app{
        flags: []cli.flag{
            &cli.boolflag{
                name:    "foo",
                usage:   "foo",
                aliases: []string{"f"},
                destination:   &foo_count,
            },
            &cli.boolflag{
                name:    "bar",
                usage:   "bar",
                aliases: []string{"b"},
                destination:   &bar_count,
            },
        },
        action: func(cctx *cli.context) error {
            fmt.println("foo_count", foo_count)
            fmt.println("bar_count", bar_count)
            return nil
        },
    }

    if err := app.run(os.args); err != nil {
        log.fatal(err)
    }
}
Copier après la connexion

Test

$ go run . -f
foo_count true
bar_count false
$ go run . -b
foo_count false
bar_count true
$ go run . -bf
Incorrect Usage: flag provided but not defined: -bf

NAME:
   main - A new cli application

USAGE:
   main [global options] command [command options] [arguments...]

COMMANDS:
   help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --foo, -f   Foo (default: false)
   --bar, -b   Bar (default: false)
   --help, -h  show help
2023/03/25 15:54:00 flag provided but not defined: -bf
exit status 1
Copier après la connexion

Solution de contournement

Ce problème est spécifiquement résolu dans un exemple de package. Ajoutez UseShortOptionHandling: true lors de la création du cli.

https://github .com/urfave/cli/blob/main/docs/v2/examples/combining-short-options.md

D'après la documentation : Cela peut être fait en utilisant un booléen UseShortOptionHandling dans la configuration de l'application, ou pour une seule commande en l'ajoutant à la configuration de la commande.

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