我在使用viper时遇到了一个问题,我已经按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)
}
发布于 2017-10-04 14:59:27
我怀疑,如您所示进行包变量初始化将导致在执行GetString()
之前viper配置不完整,因此返回的是零(空)字符串值。在没有看到如何初始化viper配置的情况下,我猜测它不在init()
函数中,而是在一个main()
函数中,该函数在为包变量赋值时尚未运行。
您可能应该在需要它的最高级别函数中检索viper.GetString("db.host")
,而不是在包初始化期间。
https://stackoverflow.com/questions/46558252
复制相似问题