标准库:DB 数据库

本文详细介绍了 Go 标准库 `database/sql` 中关于数据库连接池的设计与管理,包括数据库设计思想、DB 结构体、连接池的实现以及 `DB`、`Connection` 的相关函数。文章强调了标准库只提供基本功能,不涉及复杂的框架设计,而连接池的管理涉及到多种策略,如最大空闲连接数、最大打开连接数等。此外,还讨论了预处理语句(Prepare)、事务(Transaction)的执行流程以及对 `Scan` 和 `Null` 的处理。文章末尾推荐了几个第三方库,用于提升数据库操作的性能和便利性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库设计思想

数据库设计是很典型的案例,通常我们用它作为学习的样本,在设计中有些模式也会被鉴戒或者被引入其他的领域。首先数据库本身是非常庞大而复杂的概念,跟数据库相关的东西很多,如何在不同类型数据库之间抽象出很好的设计是很难的事情。标准库提供的是 API 设计而不是框架设计,跟数据库相关的框架可能是利用辅助类型快速创建 SQL 语句,读写操作类似 ORM 框架,但是标准库并不会提供这些。任何一种框架都会有很多不同类型组成,它的关系相对来说非常复杂,内部也会涉及大量的动态特征,这些都不是标准库应该承担的责任。

从设计角度来说,实际上是一个倒金字塔结构。底层是汇编语句,它不复杂只是单向操作或者二元操作。在这之上是系统调用,系统调用指定命令、编号和参数,它没有上下文状态。在这之上提供库级别的 Api,它的调用格式与系统调用不一样,API 设计可能是系统调用的包装,也有可能是用户空间的函数类型,理论上也不维持状态,它提供复合类型的调用。

很多编码规范建议标准库不要提供全局设置,Go 在这点上做的并不好,标准库提供了很多默认全局变量,很多严谨的语言不这么做,Go 这种习惯显然是来源于对 C 语言的继承,C 语言因为早期的编程理念有这样的痕迹,新的语言其实很少这样做。在这之上提供框架级别的 API,维持状态。对于标准库来说它提供的是库级别的 API,它不提

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值