5

我正在维护一些使用 Go (golang)、ViperCobra编写的代码。

在一条线上,它具有:

rootCmd.PersistentFlags().String("cfg", "", "A description")

然后在下一行它有

rootCmd.PersistentFlags().StringP("output", "o", ".", "Another description")

String在这种情况下和有什么区别StringP

查看各种教程中的示例用法,似乎有各种方法的版本P和非P版本,例如StringVarPStringVar

这些版本有什么区别?的意义P何在?

有没有办法可以判断给定方法是否有P对应P物?

搜索引擎倾向于将我带到 cobra 或 viper 教程页面,它们使用这些方法而不解释P或不P对应。

我发现一些材料pflags表明它可能与参数是否具有短(一个字母)形式有关。会是这样吗?

编辑后说明:收到此问题的答案后,spf13/pflag上述golang框架似乎确实在后台使用了它。但是,在使用 cobra 或 viper 时是否应该查看 pflags 文档并不清楚。
由于这是一个问答网站,我已经恢复了一个编辑,该编辑删除了我在寻找这个答案时输入的许多关键字,因为我觉得其他寻找相同信息的人会以这种方式得到更好的服务。

4

1 回答 1

7

P后缀表示除全名外还接受单个字母标志名称的函数,如 pflag 文档的使用部分所述:

pflag 包还定义了一些不在 flag 中的新函数,它们为标志提供单字母简写。您可以通过将“P”附加到任何定义标志的函数的名称来使用它们。

要回答您的个人问题:

  • 有什么区别:P函数需要一个额外的参数:单字母名称。这个短标志可以与单个-.
  • 哪些方法有P对应物:所有方法,如pflag 参考中所示

至于为什么这被记录在 pflag 而不是 viper 或 cobra 中,这是因为vipercobra都使用 pflag 库。

于 2020-08-10T13:27:51.443 回答