package sql 中最核心的的数据结构是sql.DB, 其为上层应用程序提供一个统一的抽象体,它不代表一个数据库连接,也不代表一个连接池,其是sql的包的作者为了实现:并发访问安全控制,连接池等诸多功能而设计的一个综合抽象数据结构。具体见代码注释
221 type DB struct {
#通过driverName获取driver,通过driver的Open()方法获得到DB的原始连接,sql.Open() 创建一个DB实例
222 driver driver.Driver
#DB连接字符串,创建DB实例不会理解创建连接,只有使用的时候才去创建连接
223 dsn string
224 // numClosed is an atomic counter which represents a total number of
225 // closed connections. Stmt.openStmt checks it before cleaning closed
226 // connections in Stmt.css.
#启动以来关闭的连接数
227 numClosed uint64
228
229 mu sync.Mutex // protects following fields
#空闲连接池,使用后的连接立马放到连接池中
230 freeConn []*driverConn
#当db.numOpen >= db.maxOpen时,排队等待创建的连接都会添加到改数据结构中
231 connRequests []chan connRequest
#当前打开的连接数
232 numO