dbConn变量的生命周期

来源:3-8 api之数据库层实现_数据库连接

钢铁超人

2018-12-12

dbConn 变量,从 api.go 移除,加入到 conn.go里面作为全局变量以后。请问一下,如果有一千个用户访问网站登录,是产生一千个 dbConn全局变量(每个用户分配一个),还是只有一个 dbConn变量(一千个用户共用一个)?

第二个问题:dbConn定义为全局变量,目的是每次执行数据库操作的时候不用频繁初始化(例如addusr)。我的理解是,POST或者GET请求就是一次性的,访问成功得到返回结果以后,连接就断开了,当再次访问时,仍然会执行 conn.go 的 init()函数再次初始化,所以我觉得dbConn定义成全局,或者 局部变量都一样,他不是tcp长连接一直保持。

第三个问题:dbConn 没有看到销毁的地方,需要销毁吗
第四个问题,conn.go init()函数 dbConn 赋值的地方,需不需要先判断
if(dbConn == nil)
{
dbConn,err = …
}
图片描述

写回答

1回答

艾文西

2018-12-14

  1. sql.Open不是建立连接,sql的driver自己会维护一个连接池,具体解释请看 https://github.com/go-sql-driver/mysql/wiki/Examples#a-word-on-sqlopen

  2. init()这个函数只会在go程序启动的时候执行一次,这是golang的机制,不会每次都初始化的。

  3. 不用,我们写的是个server,不是某个short-lived功能,server需要保持所有的资源长期处于可用状态,所以不用关闭

  4. 不用。原因同2

1
1
钢铁超人
非常感谢!
2018-12-14
共1条回复

Go语言实战流媒体视频网站,高效学习Go高性能开发

从零开始,全面掌握Go语言编码的架构风格和开发Web的关键技能

996 学习 · 268 问题

查看课程