知识卡片
连接池句柄而非单一连接
内容
sql.Open返回的sql.DB不是一条数据库连接,而是一个代表连接池的句柄,真正的网络连接由sql包在需要时惰性建立和复用。Open函数执行时甚至不会检查参数是否合法、更不会立即连接数据库,它只是把连接所需的配置准备好,等到第一次真正查询时才建立连接。发散:把”配置对象”和”实际资源”分开,用惰性初始化推迟真正昂贵的操作(建立TCP连接),是几乎所有连接池/客户端库的共同。
参考来源
- 位置:《Go Web编程》第6章《存储数据》(源文件:_epub-src/OEBPS/text00019.html)
- 结论依据:原文围绕“`sql.Open`返回的`sql.DB`不是一条数据库连接,而是一个代表连接池的句柄,真正的网络连接由`sql`包在需…”展开机制、顺序或组件关系说明;摘录中的关键步骤和术语支撑本卡片正文及结构图。
- 原始内容:d int Content string Author string } var Db *sql.DB func init() { var err error Db, err = sql.Open("postgres", "user=gwp dbname=gwp password=gwp ➥sslmode=disable") ❶ if err != nil …