gpt4 book ai didi

go - 使用 golang Viper lib 进行高级配置

转载 作者:IT王子 更新时间:2023-10-29 01:24:11 26 4
gpt4 key购买 nike

我正在处理我的第一个真正的 Go 项目,并且一直在寻找一些工具来处理配置。

最后,我找到了这个工具:https://github.com/spf13/viper这真的很好,但是当我尝试处理一些更复杂的配置时遇到一些问题,例如以下 config.yaml 示例:

app:
name: "project-name"
version 1

models:
modelA:
varA: "foo"
varB: "bar"

modelB:
varA: "baz"
varB: "qux"
varC: "norf"

例如,我不知道如何从 modelB 获取值。在查看 lib 代码时,我发现了以下内容,但我不太了解如何使用它:

// Marshals the config into a Struct
func Marshal(rawVal interface{}) error {...}

func AllSettings() map[string]interface{} {...}

我想要的是能够在我的包中的任何地方做类似的事情:

modelsConf := viper.Get("models")
fmt.Println(modelsConf["modelA"]["varA"])

有人可以向我解释实现此目标的最佳方法吗?

最佳答案

因为“models” block 是一个 map ,所以调用起来更容易一些

m := viper.GetStringMap("models")

m 将是一个映射[字符串]接口(interface){}

然后,你得到 m[key] 的值,它是一个 interface {},所以你将它转换为 map[interface {}]interface {} :

m := v.GetStringMap("models")
mm := m["modelA"].(map[interface{}]interface{})

现在您可以访问“varA” key ,将 key 作为接口(interface)传递{}:

mmm := mm[string("varA")]

嗯是 foo

关于go - 使用 golang Viper lib 进行高级配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27125244/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com