Golang CLI cobra 计数标志

3
我想定义一个CLI标志,它可以计算其出现的次数。
例如,我们可以使用简写为-v的标志--verbose
# verbose value should be 0
> myCmd

# verbose value should be 1
> myCmd -v

# verbose value should be 2
> myCmd -vv

# ...

有没有内置的方法可以实现这个?
1个回答

6

来自 https://github.com/spf13/cobra: "pflag库提供了标志功能"

pflag库提供了几种计数标志的选项,详见文档:https://godoc.org/github.com/spf13/pflag#Count

一个跨多个文件的长示例可能会被呈现出来,但是其核心是使用类似于以下内容(其中“run”在此情况下是cobra命令):

runCmd.Flags().CountP("verbose", "v", "counted verbosity")

要在runCmd的Run函数中稍后检索该值,请使用以下内容:

verbosity, _ := cmd.Flags().GetCount("verbose")

变量 "verbosity" 将是一个整数,表示重复次数。

在这个例子中,我使用了 pflag 的 CountP 版本,它允许提供长短标志名(我想这就是你希望找到的内容)。


1
因为我也想这样做,所以有一个后续问题:将verbosity值暴露给命令执行调用的函数的惯用方式是什么?有时被调用的函数位于不同的包中。该值应仅存在于命令的生命周期内,而不是持久存在于配置文件中等。 - Rob Wilkerson
有多种事情可以做。
  1. 在根命令中将verbosity定义为PersistentFlag,子命令会自动继承它。
  2. rootCmd的上下文中设置一个值。cobra.Command有一个名为SetContext的方法。你可以用verbosity的值创建一个新的上下文,并将其传递给根命令设置的上下文中。
- Rishabh Bhatnagar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接