一尘不染

在Golang中与多个软件包共享全局定义的数据库连接

go

我已经阅读了一些关于如何处理数据库连接的StackOverflow答案。由于它是一个池,因此我们可以全局定义它,并在多个goroutine中使用它,这是安全的。

我遇到的问题是我已将REST
API拆分为多个软件包。这些软件包中的每一个都需要一个db连接,因此我在启动时打开了一个数据库连接。但是,即使我全局定义连接,也只能在程序包级别进行。我应该怎么做才能在多个软件包中共享它?

在某些情况下,我在应用程序中使用PostgreSQL驱动程序和gin-gonic。


阅读 319

收藏
2020-07-02

共1个答案

一尘不染

还可以选择创建另一个软件包来保存与数据库连接有关的设置。然后,它可以具有全局包级别,可以在main导入它的任何包中对其进行初始化和使用。

这样,您可以明确看到正在导入数据库包。这是一些示例代码。

package database

var (
    // DBCon is the connection handle
    // for the database
    DBCon *sql.DB
)

package main

import "myApp/database"

func main() {

    var err error
    database.DBCon, err = sql.Open("postgres", "user=myname dbname=dbname sslmode=disable")

}

package user

import "myApp/database"

func Index() {
    // database handle is available here
    database.DBCon

    ...
}
2020-07-02