问题标签 [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 将环境变量解组为切片?
我有以下代码:
$MYPREFIX_LANGUAGES
未设置时,C.Languages 的长度为 2(例如默认值)。当我设置$MYPREFIX_LANGUAGES
为“英语西班牙语法语俄语”时,我得到的长度为 1。它只是将变量视为 1 个长字符串,而不是切片。如何获得切片 ( []string{"english", "spanish", "french", "russian"}
?
go - 为什么 Cobra 不读取我的配置文件?
Cobra 和 Viper 中的文档让我感到困惑。我做了cobra init fooproject
,然后在我做的项目目录中cobra add bar
。我有一个PersistentFlag
命名的foo
,这是命令中的 init 函数root
。
我的配置文件看起来像这样......
当我打电话时,go run main.go
我看到了这个......
当我打电话时,go run main.go bar
我看到这个...
所以它正在使用配置文件,但他们似乎都没有阅读它。也许我误解了 Cobra 和 Viper 的工作方式。有任何想法吗?
go - 替换毒蛇地图键而不替换整个地图
我在我的配置中使用 viper。如何在不更换整个地图的情况下更换钥匙?
在设置新的 Bob 时,我完全失去了 John。如果我将“SetDefault”更改为简单的“Set”,那么它似乎可以工作,但我想知道为什么“SetDefault”不起作用。
go - 如何使用 viper 加载地图列表?
我想用 viper 加载以下配置:
我不知道如何加载地图列表。我想我只需要解组这个键,但是这段代码不起作用:
我错过了什么?
go - 如何将数组中的配置项绑定到环境变量
下面是我的 toml 格式的配置文件。
...这是我加载它的代码:
例如,我首先检查环境变量HOST1_USERNAME1
, HOST1_PASSWORD1
,HOST2_USERNAME2
和是否HOST2_PASSWORD2
存在...如果存在,则将配置项设置为它们的值,否则我尝试从配置文件中获取值。
我知道 viper 提供AutomaticEnv
了做类似事情的方法......但它是否适用于像我这样的集合(AutomaticEnv
应在环境变量绑定后调用)?
鉴于我上面的代码,是否可以使用 viper 和 remove 提供的机制os.GetEnv
?
谢谢。
更新
下面是我更新的代码。在我定义了环境变量HOST1_USERNAME
并将HOST1_PASSWORD
配置文件中的相应设置设置为空字符串。
这是我的新配置文件:
这是我的代码:
我现在工作(感谢 Chrono Kitsune),希望对您有所帮助,j3d
go - 仅从结构返回特定字段
我有一对这样的结构:
然后是一个示例配置文件:
我正在使用viper读取配置文件,功能如下:
我现在想要做的是指定一个可选参数,datacenter
如果指定了,则只返回来自该数据中心的密钥。如果未指定参数,我希望它解组并返回整个内容。
这可能吗?
编辑:我应该补充一点,到目前为止,我所做的只是对它们的范围:
所以可能有更好的方法。
go - 使用 go-viper 的多个配置文件
是否可以使用 Viper 加载/合并多个配置文件?假设我有一个包含我的程序配置的通用配置文件,以及包含每个客户端配置的客户端特定配置文件,其中一个将根据程序的输入进行加载。
谢谢。
go - 使用 viper 解组 hcl 以构建结构
尝试将Unmarshal
配置hcl
文件转换为结构,使用viper
,返回此错误:1 error(s) decoding:\n\n* 'NATS' expected a map, got 'slice'
。什么不见了?
编码:
和配置文件(draft.hcl
在当前目录内):
编辑
已经用包检查了这个结构,hcl
它被正确地编组/解组。这也适用于yaml
and viper
。
这两个地方是有区别log.Info(viper.Get("NATS"))
的。当hcl
版本返回一个地图切片时,该yaml
版本返回一个地图:map[password:__psw__4433__ httpport:10044 port:10041 username:cl1]
。