在 go 中使用 urfave/cli 将 `BoolFlags` 组合成一个

问题描述 投票:0回答:1

我有一个代码可以获取

-f/--foo
-b/--bar
的参数。参数解析是通过 urfave/cli 包完成的,它是第二流行的 Go 参数解析器。我可以像
go run . -f -b
那样运行我的程序,但不能像
go run . -fb
有没有一种方法可以使用 urfave/cli 使它与
go run . -fb
一起工作? 如果不可能,什么 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)
    }
}

测试

$ 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
go command-line-interface
1个回答
0
投票

这个问题在其中一个包示例中得到了专门解决。在创建 cli 时添加

UseShortOptionHandling: true

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

来自文档: 这可以在您的应用程序配置中使用

UseShortOptionHandling
布尔来完成,或者通过将其附加到命令配置来用于单个命令。

© www.soinside.com 2019 - 2024. All rights reserved.