![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
golang database/sql/
文章平均质量分 75
千年的塔
Go语言和MySQL技术专家,著有《Go语言核心编程》一书。
展开
-
go database/sql 源码分析(一)sql包设计哲学
database/sql设计哲学非常优雅,但是内部实现又非常复制,本节从顶层来去分析下database/sql的实现思想 对上层应用提供一个标准的API 对驱动层定义一个标准接口层 隔离具体的数据库 各个具体的数据库驱动实现该套接口即可被使用 应用层调用逻辑不依赖具体的数据库,其使用的是sql提供的标准API 三大功能 在内部实现一个连接池 内部通过锁实现并发访问的原创 2016-08-04 19:53:40 · 2253 阅读 · 0 评论 -
go database/sql 源码分析(二)driver包设计哲学
驱动接口设计特点 驱动层设计很简单,没有并发锁的控制 驱动层的设计是基于单个连接的,没有考虑连接池 驱动层事务Tx和Stmt是独立分离的,Tx只有两个简单的方法就是Commit() 和Rollback() 驱动的具体实现者只需要在单个连接上实现驱动层的API接口即可 driver包的数据结构 调用关系 驱动注册 具体的数据库驱动只需要按照接口层的定义原创 2016-08-04 20:07:57 · 1861 阅读 · 0 评论 -
go database/sql 源码分析(三)sql.DB数据结构
package sql 中最核心的的数据结构是sql.DB, 其为上层应用程序提供一个统一的抽象体,它不代表一个数据库连接,也不代表一个连接池,其是sql的包的作者为了实现:并发访问安全控制,连接池等诸多功能而设计的一个综合抽象数据结构。具体见代码注释 221 type DB struct { #通过driverName获取driver,通过driver的Open()方法获得到DB的原始连原创 2016-08-04 20:13:25 · 2246 阅读 · 0 评论 -
go database/sql 源码分析(四)sql.Stmt数据结构
#sql.Stmt是sql包暴露给程序调用者的可见实体,一般通过db.Open函数获得DB实例后的下一步就是调用func (db *DB) Prepare 方法的的Stmt #其内部通过 css []connStmt 来绑定相关的连接和驱动层driver.Stmt #其内部不是引用driverConn,而是引用一个css []connStmt #sql包中有两个方式能够创建Stm原创 2016-08-04 20:21:12 · 2695 阅读 · 0 评论 -
go database/sql 源码分析 -题外篇
第一篇go database/sql 源码分析 的文章对其作者(Brad Fitzpatrick大神 memcached的作者 go语言项目组成员)给予高度评价,但是个人认为go database/sql 的实现不是完美无瑕的 优点: 接口设计简单,清晰,一致,友好:应用层的调用接口和驱动层的实现接口几乎一致,使用者毫无压力; 缺点: 包内部实现异常复杂、杂乱,给人一种错觉原创 2016-08-05 13:25:49 · 1371 阅读 · 2 评论