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

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

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


driver包的数据结构

go database/sql 源码分析(二)driver包设计哲学_第1张图片

调用关系

go database/sql 源码分析(二)driver包设计哲学_第2张图片


驱动注册

具体的数据库驱动只需要按照接口层的定义,实现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 }                                                                                                     
~                                                                                                               


你可能感兴趣的:(golang,database/sql/)