问题标签 [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.
go - 如何从 Viper 访问数组中的特定项目
我有一个类似于以下的 yaml 文件:
这是我的代码的简单版本:
我想使用 Viper 读取配置文件,但我不确定在使用 Get 方法时如何区分“第一个复杂项”和“第二个复杂项”。我是否需要在复杂项目到达时保持它们的开始状态?
go - viper 在片场改变数据类型
我有 json 文件的文件夹,例如:
- 架构文件1.json 文件2.json
我正在尝试迭代并从每个文件中获取所有数据map[string]interface{}
我成功地获取了这种类型的数据。但是当我将它存储到 viper 配置时,它更改为map[json:map[]]
这是剪辑
fmt.Println(result) 返回我:
但是当我尝试从 viper 获取地图时,我收到:
有人可以指出我正确的方向,以便我可以接收我存储的类型吗?
go - 将 viper 配置解组为另一个 viper 配置
我有一个 viper 配置,它有一些固定字段和一些动态字段。它看起来像这样:
我知道我可以将params
部分解组为 amap[string]interface{}
并在运行时使用这些值,但我想将此配置解组为 a viper 配置,即结构应如下所示:
但是当尝试使用这样的结构时,Params
变量被解组为一个空配置。
viper 能支持这样的用法吗?
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文件:
go - Viper 将环境变量映射到结构成员
这是我的config.yaml
文件
这是我使用毒蛇解组的逻辑
我已经设置了 env 变量export PORT=9000
,现在我的问题是如何将环境变量映射PORT
到Configurations.ServerConfig.Port
. 我想为 dev 提供具有默认值的配置文件,并希望我的应用程序从生产环境变量中读取/覆盖配置,我如何使用 viper 来实现这一点。
我看到以下选项
- 设置
SERVER_PORT
然后使用如下替换器将其解组为结构
但我想将变量映射PORT
到 struct 成员,可能是因为我的托管服务提供商设置了PORT
env 变量,而我不能使用第二点,因为我想使用 yaml 作为默认值。
go - 使用 Viper 设置 Cobra 标志的默认值
我正在使用 Go 开发一个基于 Cobra 的应用程序,对于我的一个命令,我正在定义一个这样的标志:
我还在我的根命令中设置了一个 Viper,它从文件中读取一些配置。有没有办法用 Viper 设置标志的默认值?我试过这个:
但似乎这不是方法,因为如果我在调用命令时省略标志,我会得到一个空字符串。有任何想法吗?提前致谢!
go - 在 Go 测试期间处理 Viper 配置文件路径
所以我有一个非常基本的配置,Viper 从我的基本目录中读取一个 .env 文件。如果没有 .env 文件,我会致命地终止该进程。正常运行我的应用程序时一切顺利。当我使用 运行测试时go test -v ./..
,测试框架似乎会进入每个文件的目录,并且每次都调用我的 config init() 函数,因此viper.AddConfigPath(".")
指向错误的位置。
这是我的目录结构:
环境.go
每个包基本上都依赖于我的 util 包,因此这个 init 函数会为每个测试运行。即使有测试正在运行,是否有某种方法可以让 viper 始终从基本目录中提取 .env 文件?我尝试了几个不同的 AddConfigPath() 调用。Go 有点新。或者这种环境变量的结构设置是否无法正常工作,因为它每次都未能通过我的测试?
go - 使用 Viper 将新密钥写入配置文件
第一个使用 Go 的简单项目在这里。
根据用户输入,我需要将新密钥添加到现有配置文件中。我设法用 Viper 正确阅读它并在整个应用程序中使用它,但WriteConfig
似乎不起作用。
这是一个片段:
newConfig
包含预期的新设置,但WriteConfig
不会将更改应用于配置文件。
我在 Viper 存储库中读到过,编写函数在处理现有或不存在的文件方面颇有争议,而且有点问题,但我希望它们能在这样的简单情况下工作。
我还尝试SafeWriteConfig
了其他功能(即)但没有成功。
我正在使用 Go 1.16.2 和 Viper 1.7.1。
我究竟做错了什么?
go - 是否可以使用 Viper 将前缀的 env 值列表映射到地图中?
我有一个当前格式的 dotenv 文件
我也有一个结构形式为
我正在寻找并且未能找到一种方法,我可以手动(例如:向 Viper 询问带有前缀 DB_DB_CUSTOMER1=val
的"CUSTOMER1": "val"
所有键,然后自己设置它们)或自动(但似乎Viper 没有办法以这种方式提取键/值)。
我会很感激任何指示。
谢谢!
go - Golang Viper GetSliceString 不解析 yml 文件
从问题标题中推断,我正在使用 GoLang 和 Viper。我的 element.yml 文件与试图解析它的文件位于同一目录中,它能够获取字符串和整数,但无论出于何种原因,都无法使用 GetStringSlice() 方法获取字符串切片。有人知道我做错了什么吗?我在确认一切正常的验证器中运行了我的 yml。代码如下:
元素.yml
我为驱动这些方法而编写的测试适用于整数和字符串,但不适用于字符串切片。我究竟做错了什么 ??