【发布时间】:2020-08-21 17:43:14
【问题描述】:
我真的不明白 viper 的工作原理。 这是我的代码:
configuration.go
var Config *Configuration
type ServerConfiguration struct {
Port string
}
type Configuration struct {
Server ServerConfiguration
}
func Init() {
var configuration *Configuration
viper.SetConfigFile(".env")
viper.AutomaticEnv()
if err := viper.ReadInConfig(); err != nil {
log.Fatalf("Error reading config file, %s", err)
}
err := viper.Unmarshal(&configuration)
if err != nil {
log.Fatalf("Unable to decode into struct, %v", err)
}
Config = configuration
}
func GetConfig() *Configuration {
return Config
}
.env
SERVER_PORT=:4747
问题是 Unmarshal 不起作用 例如,当我使用 configuration.Server.Port 时,它是空的
【问题讨论】:
-
我会发表评论,但我的声誉还不够高。您的代码在我的机器上运行。我建议在您的值上测试 viper.Get(FullName) 以查看是否可以获得它们。至于在 .env 中使用 _ 嵌套变量,请使用新的 viper 实例:v := viper.NewWithOptions(viper.KeyDelimiter("_"))