Golang毒蛇,我在MergeConfigMap之后无法获取字段

时间:2019-12-06 10:07:20

标签: go viper-go

我正在Go项目中,我需要设置一些配置,为此我正在使用Viper。 当我将地图与毒蛇对象合并时,之后将无法获得单个配置字段,但是当我执行viper.AllSettings()时,我会获得所有设置,例如:

package main

import (
    "fmt"
    "github.com/spf13/viper"
)

type config map[string]interface{}

func defaultConfig() config {
    return config{
        "prod": false,
        "amqp": config{
            "url":      "url",
            "workers":  2,
        },
        "log": config{
            "filename": "viperConfig",
        },
    }
}

func init() {
    conf := defaultConfig()
    if err := viper.MergeConfigMap(conf); err != nil {
        panic(err)
    }
    fmt.Println(viper.AllSettings())
    fmt.Println(viper.GetString("log.filename"))
}

func main() {
    // Some code here...
}

输出:

map[amqp:map[url:url workers:2] log:map[filename:viperConfig] prod:false]
// viperConfig is not printed out

1 个答案:

答案 0 :(得分:1)

字段“ log”是配置中的映射。您应该可以通过GetStringMapString访问其条目。

func init() {
    conf := defaultConfig()
    if err := viper.MergeConfigMap(conf); err != nil {
        panic(err)
    }
    fmt.Println(viper.AllSettings())
    fmt.Println(viper.GetStringMapString("log")["filename"])
}