
golang database/sql/
文章平均质量分 75
千年的塔
Go语言和MySQL技术专家,著有《Go语言核心编程》一书。
展开
-
go database/sql 源码分析(一)sql包设计哲学
database/sql设计哲学非常优雅,但是内部实现又非常复制,本节从顶层来去分析下database/sql的实现思想对上层应用提供一个标准的API对驱动层定义一个标准接口层隔离具体的数据库各个具体的数据库驱动实现该套接口即可被使用应用层调用逻辑不依赖具体的数据库,其使用的是sql提供的标准API三大功能在内部实现一个连接池内部通过锁实现并发访问的原创 2016-08-04 19:53:40 · 2403 阅读 · 0 评论 -
go database/sql 源码分析(二)driver包设计哲学
驱动接口设计特点驱动层设计很简单,没有并发锁的控制驱动层的设计是基于单个连接的,没有考虑连接池驱动层事务Tx和Stmt是独立分离的,Tx只有两个简单的方法就是Commit() 和Rollback()驱动的具体实现者只需要在单个连接上实现驱动层的API接口即可driver包的数据结构调用关系驱动注册具体的数据库驱动只需要按照接口层的定义原创 2016-08-04 20:07:57 · 1966 阅读 · 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 · 2387 阅读 · 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 · 2853 阅读 · 0 评论 -
go database/sql 源码分析 -题外篇
第一篇go database/sql 源码分析 的文章对其作者(Brad Fitzpatrick大神 memcached的作者 go语言项目组成员)给予高度评价,但是个人认为go database/sql 的实现不是完美无瑕的优点:接口设计简单,清晰,一致,友好:应用层的调用接口和驱动层的实现接口几乎一致,使用者毫无压力;缺点:包内部实现异常复杂、杂乱,给人一种错觉原创 2016-08-05 13:25:49 · 1546 阅读 · 2 评论