为了账号安全,请及时绑定邮箱和手机立即绑定

从单独的包函数返回错误的结构

从单独的包函数返回错误的结构

Go
白猪掌柜的 2022-05-18 14:44:16
我用 go 在我的 Ubuntu 18.04 上开发应用程序。我有配置包。这个想法是在另一个包中使用这个包来获取配置。包配置具有结构变量_Config。GetConfig函数将返回的想法,_Config当_Config未填充时,函数将首先_Config从 json 文件中填充。配置包如下所示:package configimport (    "fmt"    "github.com/tkanos/gonfig")type Config struct {    DB struct{        DBHost string        DBPort uint        DBUser string        DBPassword string        DBName string    }}var _Config Configfunc GetConfig() Config {    if (Config{}) == _Config {        _Config := Config{}        err := gonfig.GetConf("/home/mike/go/src/project/config.json", &_Config)        if err != nil{            panic("Error when parsing config")        }        fmt.Println(_Config.DB)    }    return _Config}结果Println是:{127.0.0.1 3306 user Password project}主包代码如下:包主import (    "fmt"    "project/config"    _ "github.com/jinzhu/gorm/dialects/mysql"    _ "project/config"    "syscall"    "unsafe")func main() {    _config := config.GetConfig()    fmt.Println(_config)}结果Println是:{{ 0   }}json 文件如下所示:{  "DB": {    "DBHost": "127.0.0.1",    "DBPort": 3306,    "DBUser": "user",    "DBPassword": "Password",    "DBName": "project"  }}那为什么呢?为什么我无法在主包中获得正确的配置?这个问题我认为我对 Go 在这种情况下的工作方式有错误的想象。请为我澄清这一刻,这是在应用程序中进行配置的好方法吗?如果不是,什么是好的模式?这个想法是拥有一个访问权限和一个负责的配置包,我可以在任何地方使用
查看完整描述

1 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

GetConfig()您在函数 中有一行- _Config := Config{}

在这里,您_Config在局部范围内声明一个新变量并隐藏全局变量。删除此行并重试。由于阴影,全局变量没有使用来自 json 的配置填充。


查看完整回答
反对 回复 2022-05-18
  • 1 回答
  • 0 关注
  • 94 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信