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

Go 从单独的包函数返回了错误的结构,go,Go,我用go在我的Ubuntu18.04上开发应用程序 我有一个配置包。我们的想法是在另一个包中使用这个包来获得配置。包配置具有结构变量\u config。函数GetConfig将返回\u Config,当\u Config未填充时,函数将首先从json文件中填充\u Config 配置包如下所示: package config import ( "fmt" "github.com/tkanos/gonfig" ) type Config struct { DB stru

我用go在我的Ubuntu18.04上开发应用程序

我有一个配置包。我们的想法是在另一个包中使用这个包来获得配置。包配置具有结构变量
\u config
。函数
GetConfig
将返回
\u Config
,当
\u Config
未填充时,函数将首先从json文件中填充
\u Config

配置包如下所示:

package config

import (
    "fmt"
    "github.com/tkanos/gonfig"
)

type Config struct {
    DB struct{
        DBHost string
        DBPort uint
        DBUser string
        DBPassword string
        DBName string
    }
}

var _Config Config

func 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}
{{ 0   }}
主包的代码如下所示:

{
  "DB": {
    "DBHost": "127.0.0.1",
    "DBPort": 3306,
    "DBUser": "user",
    "DBPassword": "Password",
    "DBName": "project"
  }
}
包干管

import (
    "fmt"
    "project/config"
    _ "github.com/jinzhu/gorm/dialects/mysql"
    _ "project/config"
    "syscall"
    "unsafe"
)

func main() {
    _config := config.GetConfig()
    fmt.Println(_config)
}
Println
的结果是:

{127.0.0.1 3306 user Password project}
{{ 0   }}
json文件如下所示:

{
  "DB": {
    "DBHost": "127.0.0.1",
    "DBPort": 3306,
    "DBUser": "user",
    "DBPassword": "Password",
    "DBName": "project"
  }
}
那为什么呢?为什么我不能在主包中获得正确的配置?问题是,我认为我对这种情况下围棋的工作方式有错误的想象


请为我澄清这一点,这是在应用程序中配置的好方法吗?如果没有,什么是好模式?我们的想法是为config提供一个访问权限和一个负责的包,我可以在任何地方使用它

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

这里,您在局部范围内声明一个新变量
\u Config
,并隐藏全局变量。请删除此行,然后重试。由于隐藏,全局变量没有使用json中的config填充。

删除该行config:=config{}。您的问题与配置以及返回结构和包无关。(挑剔。停止使用下划线和空白导入)。