我已经阅读了一些关于如何处理数据库连接的StackOverflow答案。由于它是一个池,因此我们可以全局定义它,并在多个goroutine中使用它,这是安全的。
我遇到的问题是我已将REST API拆分为多个软件包。这些软件包中的每一个都需要一个db连接,因此我在启动时打开了一个数据库连接。但是,即使我全局定义连接,也只能在程序包级别进行。我应该怎么做才能在多个软件包中共享它?
在某些情况下,我在应用程序中使用PostgreSQL驱动程序和gin-gonic。
还可以选择创建另一个软件包来保存与数据库连接有关的设置。然后,它可以具有全局包级别,可以在main导入它的任何包中对其进行初始化和使用。
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 ... }