golang 数据库连接池database/sql 实现原理分析
golang对数据库的请求,抽象出来一套通用的连接池,用go的机制来说,golang只需要提供一个驱动(driver)的interface,底层不同数据库协议,由用户根据自己的数据库实现对应的驱动即可。 本文从源码实现的角度,探索这里的细节以及需要避免的坑,基于1.14代码分析,部分bug在1.15中有修复或优化,这里也会提及。 golang版本:1.14 目录结构说明 └── sql ├── convert.go # 结果行的读取与转换 ├── convert_test.go ├── ctxutil.go # 绑定上下文的一些通用方法 ├── doc.txt ├── driver # driver 定义来实现数据库驱动所需要的接口 │ ├── driver.go │ ├── types.go # 数据类型别名和转换 │ └── types_test.go ├── example_cli_test.go ├── example_service_test.go ├── example_test.go ├── fakedb_test.go ├── sql.go # 通用的接口和类型,包括事...