问题标签 [viper-go]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
578 浏览

docker - 使用 Dockerfile 在 dev 上找到 Viper 配置文件,但在生产中找不到

在正常开发中(包含构建二进制文件),go 会找到该config.yaml文件,但在生产中,当使用Dockerfile图像时,它不会。

我的项目文件夹是:

config.go 是:

我的 dockerfile 是:

从该构建图像运行容器时显示的错误(恐慌)是:

如何指向/app/config/config.yaml配置文件所在的位置?

谢谢你。

0 投票
1 回答
915 浏览

go - Viper 自动环境不从环境中读取

我正在尝试完成一个非常简单的示例,其中我使用viper从环境变量加载配置。我已经通过 将它安装在我的项目中go get github.com/spf13/viper,并且依赖项在我的go.mod

这是我的代码,它可以编译并运行:

我正在设置环境变量以尝试测试环境变量名称的不同排列

我尝试了很多不同的方法,删除mapstructure注释,更改其值等,但执行时得到的只是:

我正在按照自述文件以及我在网上找到的其他演示中的说明进行操作,似乎viper没有加载环境变量。

我觉得这是一个非常简单的例子,我的要求是将配置映射到结构,并从环境变量中获取该配置。我最终可能会开始做 CLI 标志和配置文件,但是环境变量对我来说是成败,我需要它们才能工作。

我错过了什么?

0 投票
0 回答
670 浏览

go - Cobra:在不使用包全局变量的情况下为子命令提供上下文?

我使用cobraviper编写了一个简单的 CLI 工具。我最近一直在重构它以避免包全局变量,主要是因为使用 eg 建议的布局很难测试cobra init

代替...

我有更多类似的东西:

这实际上效果很好,并且使测试从一组干净的 cli 选项开始变得更加容易。我在将 Viper 集成到新方案中时遇到了一些困难。如果我只关心 root 命令,我可以在PersistentPreRun 命令中进行设置,如下所示:

这种工作方式:只要我只对与 Cobra 命令行选项相对应的配置选项感兴趣,事情就会按预期工作。但是如果我想访问config变量本身呢?

我不确定如何config在方法之外公开变量 initConfig而不将其转换为全局包。我想要实例化多个命令树的可能性,每个命令树都有自己独立的 Viper 配置对象,但我不清楚把它放在哪里。

0 投票
3 回答
634 浏览

go - 为什么我会根据调用 BindPFlag 的位置收到零指针错误?

我最近才开始使用 Go,并且在使用 Cobra 和 Viper 时遇到了一些我不确定我是否理解的行为。

这是您通过运行获得的示例代码的略微修改版本cobra init。在main.go我有:

cmd/root.go我有:

此代码将在最终调用时出现 nil 指针引用恐慌 fmt.Printf

如果我将调用config.BindPFlagNewCmdRoot 函数移到命令的顶部initConfig,一切运行都没有问题。

这里发生了什么?根据有关使用的 Viper 文档 BindPFlags

和 BindEnv 一样,值不是在调用绑定方法时设置,而是在访问时设置。这意味着您可以尽可能早地绑定,即使在 init() 函数中也是如此。

这几乎正​​是我在这里所做的。在我打电话的时候 config.BindPflagconfig是非零,cmd是非零,并且 name参数已经被注册。

config我认为我在 in 的闭包中使用了一些事情PersistentPreRun,但我不知道为什么会导致这个失败。

0 投票
1 回答
86 浏览

go - 在 Viper 中访问嵌套 YAML 结构时出现问题

最近用我的 Cobra 应用程序尝试使用 Viper 来解析我的配置,但结果我无法解析内部嵌套块。地图ClustersOuter始终为空,我确信地图结构已正确标记。我更喜欢使用 Viper Unmarshall 功能而不是手动获取数据类型。

输出

不知何故,我似乎只能检索zone地图及其 ID,但不能检索地图的任何clusters地图。

我的输入: config.yml

configuration.go

main.go

0 投票
1 回答
581 浏览

go - 在 Go 中使用 viper 读取布尔值

我正在使用 viper 来管理 Go app 的配置和环境变量。
json 配置文件中的所有值都是正确的,即使 bool 值在 json 文件中有一个 true 值,它也总是为 false

配置包

当我尝试访问任何字符串时,所有这些都是工作文件,但是当我尝试访问 bool 变量时,它总是给出 false

0 投票
2 回答
131 浏览

go - 如何使用结构迭代 yml 部分?

我用毒蛇。我正在尝试使用 yml-config 从结构中获取信息。

和 config.yml

我可以得到这样的结构物品吗?我无法获得这样的联系数据。可能吗?

0 投票
0 回答
93 浏览

go - 在 Go With Profile 部分中解组 TOML

我目前正在尝试解组配置文件(与 AWS 在使用其 CLI 时使用的配置文件非常相似)。但是,我创建的结构中没有添加任何内容。

这是我的源代码:

这是我的config.toml文件中的内容:

0 投票
2 回答
424 浏览

go - viper 动态加载配置文件有数据竞争

我想动态加载配置文件而不是重新启动我的 Go 应用程序。我编写了以下文件,这些文件运行但有数据竞争。

配置文件

main.go

配置.yml

config_base.yml

去.mod

我最近了解到 viper 不是线程安全的,因此我需要用互斥锁包装它。我试着做同样的事情。在 config.go 文件中,func loadConfigDynamically,我将 OnConfigChange 设置为读取数据竞争。并且在同一行的同一函数中是先前的写入数据竞争。我运行上面的包

并更改 config.yml 中 env 的值以测试配置文件是否正在动态加载。这种数据竞争仅在第一次动态重新加载配置时发生。对于随后的时间,它工作得很好。

0 投票
1 回答
48 浏览

go - 在 Go 中使用 Cobra 和 Viper 配置默认目录路径

我希望我的 CLI 应用程序的用户输入他们要保存文件的特定路径。我尝试使用 Cobra 的 --config 标志,但我不知道如何使用。

例子:

我怎么能这样做?