Viper,无法获得函数外部初始化的值

时间:2017-10-04 06:22:38

标签: go

我使用毒蛇有问题,我已经通过viper方法分配变量,所以当我尝试在任何函数中获取值时,我有一个空值。有人知道为什么会这样吗?任何其他变量初始化工作正常,但不是viper GetString方法。

结构: main.go

    package main

    import (
        "project/Model"
        "github.com/spf13/viper"
        ...
    )

    func main() {
        //Config handling
        viper.SetConfigName("main")
        viper.AddConfigPath("/config/")
        err = viper.ReadInConfig()
        ...
    }

包装模型

    package Model

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

    var sqlhost = viper.GetString("db.host")

    func foo() {
        log.Println(sqlhost)
    }    

1 个答案:

答案 0 :(得分:0)

我怀疑在显示时执行包变量初始化将导致viper配置在执行GetString()之前未完成,因此零(空)字符串值是返回的值。在没有看到你如何初始化你的viper配置的情况下,我猜测它不在init()函数中,而是在main()函数中,当时它还没有运行包变量已分配。

您应该检索需要它的最高级别函数内的viper.GetString("db.host"),而不是在程序包初始化期间。