问题标签 [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 投票
1 回答
1305 浏览

go - 如何从 Viper 访问数组中的特定项目

我有一个类似于以下的 yaml 文件:

这是我的代码的简单版本:

我想使用 Viper 读取配置文件,但我不确定在使用 Get 方法时如何区分“第一个复杂项”和“第二个复杂项”。我是否需要在复杂项目到达时保持它们的开始状态?

0 投票
1 回答
52 浏览

go - viper 在片场改变数据类型

我有 json 文件的文件夹,例如:

  • 架构文件1.json 文件2.json

我正在尝试迭代并从每个文件中获取所有数据map[string]interface{}

我成功地获取了这种类型的数据。但是当我将它存储到 viper 配置时,它更改为map[json:map[]]

这是剪辑

fmt.Println(result) 返回我:

但是当我尝试从 viper 获取地图时,我收到:

有人可以指出我正确的方向,以便我可以接收我存储的类型吗?

0 投票
0 回答
42 浏览

go - 将 viper 配置解组为另一个 viper 配置

我有一个 viper 配置,它有一些固定字段和一些动态字段。它看起来像这样:

我知道我可以将params部分解组为 amap[string]interface{}并在运行时使用这些值,但我想将此配置解组为 a viper 配置,即结构应如下所示:

但是当尝试使用这样的结构时,Params变量被解组为一个空配置。

viper 能支持这样的用法吗?

0 投票
1 回答
2564 浏览

go - 无法使用 viper 解组

我一直在尝试通过解组我的 json 文件来提取一些 JSON,但是,我不知道为什么它没有发生。我能够使用viper.AllSettings()但不能通过解组来获取数据。我认为我犯了一个愚蠢的错误,请分享您的想法。github链接是-https: //github.com/parthw/100-days-of-code/tree/main/golang/d6-cobra-viper-continued,代码如下。

main.go

在 cmd 目录中使用 cobra CLI 生成的代码:

输出:

JSON文件:

0 投票
1 回答
2867 浏览

go - Viper 将环境变量映射到结构成员

这是我的config.yaml文件

这是我使用毒蛇解组的逻辑

我已经设置了 env 变量export PORT=9000,现在我的问题是如何将环境变量映射PORTConfigurations.ServerConfig.Port. 我想为 dev 提供具有默认值的配置文件,并希望我的应用程序从生产环境变量中读取/覆盖配置,我如何使用 viper 来实现这一点。

我看到以下选项

  1. 设置SERVER_PORT然后使用如下替换器将其解组为结构
  1. Go viper .yaml 值环境变量覆盖

但我想将变量映射PORT到 struct 成员,可能是因为我的托管服务提供商设置了PORTenv 变量,而我不能使用第二点,因为我想使用 yaml 作为默认值。

0 投票
0 回答
1099 浏览

go - 使用 Viper 设置 Cobra 标志的默认值

我正在使用 Go 开发一个基于 Cobra 的应用程序,对于我的一个命令,我正在定义一个这样的标志:

我还在我的根命令中设置了一个 Viper,它从文件中读取一些配置。有没有办法用 Viper 设置标志的默认值?我试过这个:

但似乎这不是方法,因为如果我在调用命令时省略标志,我会得到一个空字符串。有任何想法吗?提前致谢!

0 投票
2 回答
929 浏览

go - 在 Go 测试期间处理 Viper 配置文件路径

所以我有一个非常基本的配置,Viper 从我的基本目录中读取一个 .env 文件。如果没有 .env 文件,我会致命地终止该进程。正常运行我的应用程序时一切顺利。当我使用 运行测试时go test -v ./..,测试框架似乎会进入每个文件的目录,并且每次都调用我的 config init() 函数,因此viper.AddConfigPath(".")指向错误的位置。

这是我的目录结构:

环境.go

每个包基本上都依赖于我的 util 包,因此这个 init 函数会为每个测试运行。即使有测试正在运行,是否有某种方法可以让 viper 始终从基本目录中提取 .env 文件?我尝试了几个不同的 AddConfigPath() 调用。Go 有点新。或者这种环境变量的结构设置是否无法正常工作,因为它每次都未能通过我的测试?

0 投票
2 回答
967 浏览

go - 使用 Viper 将新密钥写入配置文件

第一个使用 Go 的简单项目在这里。

根据用户输入,我需要将新密钥添加到现有配置文件中。我设法用 Viper 正确阅读它并在整个应用程序中使用它,但WriteConfig似乎不起作用。

这是一个片段:

newConfig包含预期的新设置,但WriteConfig不会将更改应用于配置文件。

我在 Viper 存储库中读到过,编写函数在处理现有或不存在的文件方面颇有争议,而且有点问题,但我希望它们能在这样的简单情况下工作。

我还尝试SafeWriteConfig了其他功能(即)但没有成功。

我正在使用 Go 1.16.2 和 Viper 1.7.1。

我究竟做错了什么?

0 投票
1 回答
99 浏览

go - 是否可以使用 Viper 将前缀的 env 值列表映射到地图中?

我有一个当前格式的 dotenv 文件

我也有一个结构形式为

我正在寻找并且未能找到一种方法,我可以手动(例如:向 Viper 询问带有前缀 DB_DB_CUSTOMER1=val"CUSTOMER1": "val"所有键,然后自己设置它们)或自动(但似乎Viper 没有办法以这种方式提取键/值)。

我会很感激任何指示。

谢谢!

0 投票
1 回答
119 浏览

go - Golang Viper GetSliceString 不解析 yml 文件

从问题标题中推断,我正在使用 GoLang 和 Viper。我的 element.yml 文件与试图解析它的文件位于同一目录中,它能够获取字符串和整数,但无论出于何种原因,都无法使用 GetStringSlice() 方法获取字符串切片。有人知道我做错了什么吗?我在确认一切正常的验证器中运行了我的 yml。代码如下:

元素.yml

我为驱动这些方法而编写的测试适用于整数和字符串,但不适用于字符串切片。我究竟做错了什么 ??