猿问

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

我用 go 在我的 Ubuntu 18.04 上开发应用程序。


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


配置包如下所示:


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}

主包代码如下:


包主


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 在这种情况下的工作方式有错误的想象。


请为我澄清这一刻,这是在应用程序中进行配置的好方法吗?如果不是,什么是好的模式?这个想法是拥有一个访问权限和一个负责的配置包,我可以在任何地方使用


白猪掌柜的
浏览 95回答 1
1回答

HUH函数

GetConfig()您在函数 中有一行- _Config := Config{}。在这里,您_Config在局部范围内声明一个新变量并隐藏全局变量。删除此行并重试。由于阴影,全局变量没有使用来自 json 的配置填充。
随时随地看视频慕课网APP

相关分类

Go
我要回答