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

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

PHPz
PHPzavant
2024-02-09 17:33:081082parcourir

使用 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)
    }
}

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

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!

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