【发布时间】:2017-05-25 11:59:14
【问题描述】:
基本信息:我已经创建了一个 go 应用程序并使用 Cobra 来实现它。 Cobra 使用 Viper 作为命令行参数和标志。
我有一个带有标志绑定的命令侦听,我想在 yaml 文件中对其进行配置。
代码:
listen命令的init函数如下所示:
func init() {
RootCmd.AddCommand(listenCmd)
listenCmd.Flags().StringP("bind", "b", ":50051", "Provide bind definition")
viper.BindPFlag("bind", listenCmd.Flags().Lookup("bind"))
}
我的申请代码在https://github.com/sascha-andres/go-logsink
问题:
当我使用 listen --bind "bla" 调用应用程序时,标志被正确设置为 bla,但我还没有找到使用位于我的主目录中的 YAML 文件来实现此目的的方法。
已尝试配置文件:
---
connect:
bind: "bla"
和
---
bind: "bla"
在这两种情况下都找到了配置文件,但标志不是预期值而是默认值。
如何编写配置文件才能正确填充标志?
【问题讨论】:
-
抱歉,我无法重现您的问题:我尝试在 /tmp 和您的代码中使用我的 yaml 配置文件,并且正确找到了绑定参数并将其设置为它的配置值。但是,我注意到绑定参数一定不能嵌套才能找到,你的配置是这样吗?
-
@T.Claverie 我目前有第二个版本(未嵌套)。我已将其粘贴到pastebin.com/7TcqrdgV。更新问题并附有完整来源的链接
-
@WGH供您参考:这个1年5个月,另一个1年2个月,这里不用投票关闭
-
@Sascha 我知道,但另一个问题更容易理解,因为它包括有问题的部分 - 使用绑定到 pflag 的变量而不是
viper.GetString()- 这个问题只有一个到存储库的链接不再有相关代码。