使用 Go (golang)、cobra 和 viper 时,StringVar 与 StringVarP 或 String 与 StringP 之间有什么区别?

M_M*_*M_M 5 go viper-go go-cobra

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

一方面,它有:

rootCmd.PersistentFlags().String("cfg", "", "A description")
Run Code Online (Sandbox Code Playgroud)

然后在下一行它有

rootCmd.PersistentFlags().StringP("output", "o", ".", "Another description")
Run Code Online (Sandbox Code Playgroud)

在这种情况下StringStringP在这种情况下有什么区别?

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

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

有没有一种方法可以判断给定的方法是否具有对应物P或非P对应物?

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

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

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

Mar*_*arc 7

P后缀表示除了全名接受单个字母标志名称,在所记录的一个函数使用的PFLAG文档的部分:

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

回答您的个人问题:

  • 有什么区别:P函数采用一个额外的参数:单个字母名称。此短标志可与单个-.
  • 哪些方法有P对应的方法:所有这些方法,可以在pflag 参考中看到

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