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

时间:2015-02-26 19:45:47

标签: 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函数中对其他包的任何调用中?

1 个答案:

答案 0 :(得分:3)

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

首先...

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
}

希望这有帮助。