ホームページ >バックエンド開発 >Golang >go で urfave/cli を使用して `BoolFlags` を 1 つにマージします

go で urfave/cli を使用して `BoolFlags` を 1 つにマージします

PHPz
PHPz転載
2024-02-09 17:33:081094ブラウズ

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

php Editor Banana は、Go 言語の urfave/cli ライブラリを使用して BoolFlags を 1 つにマージする方法を紹介します。 urfave/cli は、エレガントなコマンド ライン アプリケーションの作成に役立つ強力なコマンド ライン ライブラリです。コマンド ライン アプリケーションでは、特定のスイッチやオプションが有効かどうかを示すために使用されるさまざまな BoolFlags (ブール フラグ) を処理する必要があることがよくあります。ただし、BoolFlags が多数ある場合、コードは冗長になり、保守が困難になります。 urfave/cli を使用すると、複数の BoolFlags を 1 つに簡単にマージでき、コードがより簡潔で理解しやすくなります。次に、具体的な実装方法を見ていきましょう。

質問内容

-f/--fooまたは-b/--barのパラメータを取得できるコードがあります。パラメーターの解析は、2 番目に人気のある go パラメーター パーサーである urfave/cli パッケージを通じて行われます。 go run のようにプログラムを実行できます。 -f -b ですが、 go run とは異なります。 -fb go run で機能させる方法はありますか。 -fb urfave/cli を使用しますか? それが不可能な場合、どの go モジュールを使用すれば可能になりますか?

コード:

リーリー ###テスト###
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)
    }
}

解決策

この問題は、パッケージの例で具体的に解決されています。 cli を作成するときに

UseShortOptionHandling: true

を追加します。

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

ドキュメントより: これは、アプリケーション構成で

UseShortOptionHandling

ブール値を使用するか、単一のコマンドに対してコマンド構成に追加することで実行できます。

以上がgo で urfave/cli を使用して `BoolFlags` を 1 つにマージしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。