Heim  >  Artikel  >  Backend-Entwicklung  >  Führen Sie „BoolFlags“ mit urfave/cli in go zu einem zusammen

Führen Sie „BoolFlags“ mit urfave/cli in go zu einem zusammen

PHPz
PHPznach vorne
2024-02-09 17:33:081082Durchsuche

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

Der PHP-Editor Banana ist hier, um Ihnen eine Methode zum Zusammenführen von BoolFlags zu einem einzigen vorzustellen, indem Sie die urfave/cli-Bibliothek in der Go-Sprache verwenden. urfave/cli ist eine leistungsstarke Befehlszeilenbibliothek, die uns bei der Erstellung eleganter Befehlszeilenanwendungen helfen kann. In Befehlszeilenanwendungen müssen wir uns häufig mit verschiedenen BoolFlags (booleschen Flags) befassen, die angeben, ob bestimmte Schalter oder Optionen aktiviert sind. Wenn jedoch viele BoolFlags vorhanden sind, wird der Code ausführlich und schwer zu pflegen. Mit urfave/cli können wir problemlos mehrere BoolFlags zu einem zusammenführen, wodurch der Code prägnanter und verständlicher wird. Schauen wir uns als Nächstes die spezifische Implementierungsmethode an.

Frageninhalt

Ich muss einen Code erhalten -f/--foo-b/--bar 的参数。参数解析是通过 urfave/cli 包完成的,这是第二个最流行的 go 参数解析器。我可以像 go run 一样运行我的程序。 -f -b 但不像 go run 。 -fb Gibt es eine Möglichkeit, es mit go run 一起工作。 -fb mithilfe von urfave/cli zum Laufen zu bringen? Wenn es nicht möglich ist, welches Go-Modul würde es möglich machen?

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

Workaround

Dieses Problem wird konkret in einem Paketbeispiel gelöst. Fügen Sie UseShortOptionHandling: true hinzu, wenn Sie eine CLI erstellen.

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

Aus der Dokumentation: Dies kann mit einem UseShortOptionHandling-Bool in der Anwendungskonfiguration oder für einen einzelnen Befehl durch Anhängen an die Befehlskonfiguration erfolgen.

Das obige ist der detaillierte Inhalt vonFühren Sie „BoolFlags“ mit urfave/cli in go zu einem zusammen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen