go - 与多个包共享全局定义的 db conn

标签 go

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

我遇到的问题是我将 REST API 拆分为多个包。这些包中的每一个都需要一个数据库连接,所以我在启动时打开了一个数据库连接。但即使我在全局范围内定义连接,它也只是在包级别。我该怎么做才能在多个包之间共享它?

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

最佳答案

还可以选择创建另一个包来保存与数据库连接相关的设置。然后它可以有一个包级别的全局,可以在 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

    ...
}

关于go - 与多个包共享全局定义的 db conn,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31218008/

相关文章:

golang : net. Conn 读取很慢?

network-programming - 谷歌去 : binding multicast socket

go - 无缓冲 channel

testing - 如何在go test中设置日志级别?

go - 在非默认命名空间中部署时,Cluster Config 无法获取 Pod

pointers - 如何共享嵌入的结构指针

http - 为什么 http.ResponseWriter 不实现响应流 End() 调用?

xml - go - 标签中的属性/隐藏父标签 : SOAP envelope

Golang包 block 变量线程安全吗?

go - 为什么代理未定义?