如何在Golang Cloud函数中重用数据库连接?

问题描述 投票:0回答:1

我目前正在尝试将应用程序迁移到IBM云功能,但是我面临的一个问题是,每次调用操作时,都会避免重新连接Postgresql DB。

我发现关于如何在Go中重用数据库连接的信息很少,而我尝试过的解决方案(将数据库处理程序保留在全局变量中)不起作用。

任何人都可以指出我正确的文档吗?

谢谢,

托马斯

PS:这是说明我尝试方式的代码片段:

func Storage() Storager {
    once.Do(func() {
        db := InitDB()
        println("Initiating DB...")
        s = &storage{
            db: db,
        }
    })

    return s
}

// This is declared as a global variable in main
var s = storage.Storage()
go ibm-cloud serverless openwhisk ibm-cloud-functions
1个回答
0
投票

可以在OpenWhisk动作中保留全局状态,这适用于Golang函数。

package main

var counter = 1

func Main(args map[string]interface{}) map[string]interface{} {
  msg := make(map[string]interface{})
  msg["counter"] = counter
  counter = counter + 1
  return msg
}

如果创建此动作并连续运行多次,则会看到计数器值每次都增加。

所以您要尝试执行的操作应该可以。在您的示例中,检查操作是否已成功完成,并且未引发错误和失败(这防止了进一步的重用)。此外,检查激活记录以查看激活是冷还是热。这可以通过检查激活记录是否具有initTime注释以指示冷启动来看到。如果不存在,则激活是温暖的,并且最新的激活在与某些先前的激活相同的上下文中运行。

© www.soinside.com 2019 - 2024. All rights reserved.