gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:38:46 25 4
gpt4 key购买 nike

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

我有配置包。想法是在另一个软件包中使用此软件包以获取配置。包配置具有结构变量_Config。函数GetConfig将返回_Config的想法,当未填充_Config时,该函数将首先从json文件中填充_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}

主包的代码如下:

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

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

最佳答案

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

在这里,您要在局部范围内声明一个新的变量_Config并在全局变量下添加阴影。删除此行,然后重试。由于阴影,全局变量未使用json中的config填充。

关于go - 从单独的包函数返回的结构错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60409895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com