没有 defer rows.Close() 带来的坑

发布于 2022-01-30 13:12:04 字数 444 浏览 1152 评论 0

一篇很棒的剖析源码的blog: GORM 之 for (rows.Next) 提前退出别忘了 Close

gorm 中调用 Rows() 函数进行查询的时候,需要获取一个连接。策略是:

  1. 如果连接池中有空闲连接,返回一个空闲的
  2. 如果连接池中没有空的连接,且没有超过最大创建的连接数,则创建一个新的返回
  3. 如果连接池中没有空的连接,且超过最大创建的连接数,则等待连接释放后,返回这个空闲连接

rows.Close() 会释放掉连接,除此之外,在 for rows.Next() 的时候,如果没有下一行的话,或者准备下一条记录的时候出错了,也会释放连接。而如果用的是 if rows.Next(),则可能会导致很多连接都没有释放。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

文章
评论
84963 人气
更多

推荐作者

夢野间

文章 0 评论 0

doggiejohn

文章 0 评论 0

就此别过

文章 0 评论 0

初见终念

文章 0 评论 0

qq_rvKjBH

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文