database - 如何在 Go 中的包之间共享数据库连接?

标签 database go

我在我的 main 包中声明我的数据库连接,有点像这样:

package main

var Db *sql.DB

func main() {
    var err error
    db, err = sql.Open("postgres", "stuff...")

    // error handling and more app stuff
}

首先,我将所有代码都放在 main 包中,并且我可以从其他文件访问数据库连接。但是,我想将代码分离到包中,现在 Db 变量不再可见。

是否可以跨包共享它,或者我是否必须将它作为参数添加到我的 main 函数中对其他包的任何调用?

最佳答案

我将分享一些目前在我的一个应用中的代码。

首先...

package conf

import (
    "github.com/jinzhu/gorm"
    _ "github.com/lib/pq"
)

func ConnectDB() *gorm.DB {
    db, err := gorm.Open("postgres", /**/)
    if err!=nil {
        panic(err)
    }

    db.LogMode(true)

    return &db
}

然后....

package model

import (
    "github.com/jinzhu/gorm"
)

var DB *gorm.DB

func SetDatabase(db *gorm.DB) {
    DB = db
    // Some other set up here
}

最后...

package main

import (
    "conf"
    "model"
)

func main() {
    db := conf.ConnectDB()
    model.SetDatabase(db)
    // Some other stuff
}

希望这对您有所帮助。

关于database - 如何在 Go 中的包之间共享数据库连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28751402/

相关文章:

mysql - SQL 列出所有重复项

go - 如何在 GORM 中建立一对一关系?

opengl - 在 Go 中使用 OpenGL

c# - 使用 C# 应用程序项目、mysql 服务器和自动将数据库恢复到 MySQL 服务器的能力创建安装程序

php - TXT 文件中的产品分析数据(使用 YAML)

c# - 将新项目添加到 CSLA EF4 模式

mysql - 如何通过 3 个内连接获得最大值?

json - 具有多个参数的过滤器结构

java - 设计Android应用程序后端

google-app-engine - 数据存储持久化是其中之一