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回答
-
sql.Open不是建立连接,sql的driver自己会维护一个连接池,具体解释请看 https://github.com/go-sql-driver/mysql/wiki/Examples#a-word-on-sqlopen
init()这个函数只会在go程序启动的时候执行一次,这是golang的机制,不会每次都初始化的。
不用,我们写的是个server,不是某个short-lived功能,server需要保持所有的资源长期处于可用状态,所以不用关闭
不用。原因同2
112018-12-14
相似问题