sql - Golang sql数据库打开和关闭

标签 sql database go database-connection

在 Go database/sql 包中,它说很少用 db.Close 关闭数据库,因为它应该被许多 go 例程共享。那么当我们有 100 个查询相同数据的函数时,哪个更好:

  1. 在每个函数中打开数据库
  2. 只打开数据库一次,每 100 个函数使用同一个连接。

1 更容易,因为如果一个失败,其他 99 个仍然可以工作。无需传递数据库连接参数。但在性能方面哪个更好?

最佳答案

您错过了文档中的一个重要部分:

The returned DB is safe for concurrent use by multiple goroutines and maintains its own pool of idle connections. Thus, the Open function should be called just once. It is rarely necessary to close a DB.

(强调我的)

因此,您的选项 #2 实际上没有意义。连接被合并 - 因此 对每 100 个函数使用相同的连接 不适用。此外,选项 #1 是浪费时间 - 按照文档所述只执行一次,但在执行后调用 Ping 只是为了确保一切正常(并让它实际尝试连接到数据库 - 无论驱动程序如何)。

关于sql - Golang sql数据库打开和关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27241187/

相关文章:

mysql - 根据 SELECT 结果更新

mysql - 子查询困惑

sql - 为什么我不能在同一个表上同时指定主键和唯一约束?

java - 如何处理DB mysql中的特殊字符

sql - 用基于规则/声明式的实现替换关系数据库(SQL Server)?

go - Etcd - 过时的索引。如何从客户端读取 "X-Etcd-Index"

sql - Postgres 查询以获取所有子 ID

mysql - SQL/MySQL : split a quantity value into multiple rows by date

json - 编码到 json 时如何强制将 `[8]byte` 编码为十六进制

go - goroutines 的意外输出