Go 从单独的包函数返回了错误的结构
我用go在我的Ubuntu18.04上开发应用程序 我有一个配置包。我们的想法是在另一个包中使用这个包来获得配置。包配置具有结构变量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
\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{}。您的问题与配置以及返回结构和包无关。(挑剔。停止使用下划线和空白导入)。