为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
拉丁的传说 2022-06-01 10:55:26
我目前正在尝试将我的应用程序迁移到 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 mainvar s = storage.Storage()
查看完整描述

1 回答

?
缥缈止盈

TA贡献2041条经验 获得超4个赞

可以在 OpenWhisk 操作中保留全局状态,这适用于 Golang 函数。例如,这里有一个counter.go函数,每次调用该函数时都会增加一个全局计数器。


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

}

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


> 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指示冷启动的注释来查看。如果不存在,则激活是热的,并且最新的激活在与以前的激活相同的上下文中运行。


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号