go database/sql 源码分析(二)driver包设计哲学

hittata · · 1060 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

驱动接口设计特点
驱动层设计很简单,没有并发锁的控制
驱动层的设计是基于单个连接的,没有考虑连接池
驱动层事务Tx和Stmt是独立分离的,Tx只有两个简单的方法就是Commit() 和Rollback()

驱动的具体实现者只需要在单个连接上实现驱动层的API接口即可


driver包的数据结构


调用关系



驱动注册

具体的数据库驱动只需要按照接口层的定义,实现api,然后在sql包的全局驱动切片sql.drivers中注册即可。

  27 var (
  28     driversMu sync.RWMutex
  29     drivers   = make(map[string]driver.Driver)                                                       
  30 )  
  38 func Register(name string, driver driver.Driver) {

mysql 驱动 github.com/go-sql-driver/mysql注册过程:

src/github.com/go-sql-driver/mysql/driver.go 

165 func init() {                                                                                         
166     sql.Register("mysql", &MySQLDriver{})                                                             
167 }                                                                                                     
~                                                                                                               



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:hittata

查看原文:go database/sql 源码分析(二)driver包设计哲学

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1060 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传