猿问

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

我目前正在尝试将我的应用程序迁移到 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()


拉丁的传说
浏览 144回答 1
1回答

缥缈止盈

可以在 OpenWhisk 操作中保留全局状态,这适用于 Golang 函数。例如,这里有一个counter.go函数,每次调用该函数时都会增加一个全局计数器。package mainvar counter = 1func Main(args map[string]interface{}) map[string]interface{} {  msg := make(map[string]interface{})  msg["counter"] = counter  counter = counter + 1  return msg}如果您创建此操作并连续运行多次,您将看到计数器值每次都增加。> wsk action create counter counter.go> wsk action invoke counter --result{  "counter": 1}> wsk action invoke counter --result{  "counter": 2}> wsk action invoke counter --result{  "counter": 3}所以你想做的事情应该有效。在您的示例中,检查操作是否成功完成并且没有引发错误和失败(这会阻止进一步重用)。此外,检查激活记录以查看激活是热激活还是冷激活。这可以通过检查激活记录是否具有initTime指示冷启动的注释来查看。如果不存在,则激活是热的,并且最新的激活在与以前的激活相同的上下文中运行。
随时随地看视频慕课网APP

相关分类

Go
我要回答