相关疑难解决方法(0)

如何处理Go应用中的Db连接打开/关闭?

我的Web API应用程序中有一组功能。他们对Postgres数据库中的数据执行一些操作。

func CreateUser () {
    db, err := sql.Open("postgres", "user=postgres password=password dbname=api_dev sslmode=disable")
    // Do some db operations here
}
Run Code Online (Sandbox Code Playgroud)

我想函数应该彼此独立地与db一起工作,所以现在我sql.Open(...)在每个函数中都有了。我不知道这是管理数据库连接的正确方法。

应用启动后,是否应该在某个地方打开它,并将db作为参数传递给相应的函数,而不是在每个函数中都打开连接?

postgresql go

4
推荐指数
1
解决办法
936
查看次数

如何在Go中重复使用单个Postgres DB连接进行行插入?

我正在尝试使用Go将一行数据插入到Postgres表中,用于从rabbitmq接收的每个新消息,使用单个连接到DB,该数据库在下面的代码的init函数中打开.

代码不会打开一个连接,而是打开497并最大化,导致行插入停止...

我已经使用这些问题的信息试图打开和关闭在Go应用程序的数据库连接,并在函数内部开放式数据库连接该说我应该打开一个连接,并使用全球数据库,以便主要功能的SQL语句传递到在打开连接init函数.

我以为我已经这样做了,但是为每个新行打开了一个新连接,所以一旦达到postgres连接限制,代码就会停止工作......

我是Go的新手,并且编程经验有限,过去两天我一直在努力理解/解决这个问题,我真的可以帮助理解我在哪里出错...

var db *sql.DB

func init() {
    var err error
    db, err = sql.Open ( "postgres", "postgres://postgres:postgres@SERVER/PORT/DB")
    if err != nil {
        log.Fatal("Invalid DB config:", err)
    }
    if err = db.Ping(); err != nil {
        log.Fatal("DB unreachable:", err)
    }
}

func main() {

// RABBITMQ CONNECTION CODE IS HERE

// EACH MESSAGE RECEIVED IS SPLIT TO LEGEND, STATUS, TIMESTAMP VARIABLES

// VARIABLES ARE PASSED TO sqlSatement    

        sqlStatement := `
        INSERT INTO heartbeat …
Run Code Online (Sandbox Code Playgroud)

go

4
推荐指数
1
解决办法
2129
查看次数

标签 统计

go ×2

postgresql ×1