分享
go database/sql 源码分析(一)sql包设计哲学
hittata · · 2320 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
database/sql设计哲学非常优雅,但是内部实现又非常复制,本节从顶层来去分析下database/sql的实现思想
隔离具体的数据库
各个具体的数据库驱动实现该套接口即可被使用
在内部实现一个连接池
内部通过锁实现并发访问的安全性
使应用程序调用者和驱动的实现者看到的接口视角的一致性
并发的安全性支持
连接池的管理
面向接口编程
sql包的实现者教科书般的告诉我们实现抽象型平台型中间件的方法
抽象底层实现者接口
中间件面向接口层实现平台级层逻辑
对外提供一套统一的调用API,隔离底层实现者和上层调用者
基于该种思想可以抽象的平台型中间件有:
日志记录
记录到文件
记录到DB
存放在内存
存放在DB
各种配置文件
DB
sql包中定义数据结构组合了driver层的接口变量和内部数据元素
层内高内聚,层间低耦合
隐藏实现的复杂性,通过接口粘合
对上层应用提供一个标准的API
隔离具体的数据库
各个具体的数据库驱动实现该套接口即可被使用
应用层调用逻辑不依赖具体的数据库,其使用的是sql提供的标准API
在内部实现一个连接池
内部通过锁实现并发访问的安全性
内部实现数据类型的自动转换
使应用程序调用者和驱动的实现者看到的接口视角的一致性
则也算一种编程哲学:增强功能但是调用接口不变,一般的理解是增强功能要增加接口,但是sql包的实现几乎没有增加太多的调用接口而实现功能增强
并发的安全性支持
连接池的管理
为访问DB提供一个抽象体,看不到连接,连接完全在内部实现中隐藏了
面向接口编程
sql包的实现者教科书般的告诉我们实现抽象型平台型中间件的方法
抽象底层实现者接口
中间件面向接口层实现平台级层逻辑
对外提供一套统一的调用API,隔离底层实现者和上层调用者
基于该种思想可以抽象的平台型中间件有:
日志记录
记录到文件
记录到DB
写到网络
存放在内存
存放在DB
存放在文件
各种配置文件
DB
其他中间件
sql包中定义数据结构组合了driver层的接口变量和内部数据元素
这种可以看作golang独有的组合编程模式
层内高内聚,层间低耦合
隐藏实现的复杂性,通过接口粘合
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2320 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
对上层应用提供一个标准的API
隔离具体的数据库
各个具体的数据库驱动实现该套接口即可被使用
应用层调用逻辑不依赖具体的数据库,其使用的是sql提供的标准API
在内部实现一个连接池
内部通过锁实现并发访问的安全性
内部实现数据类型的自动转换
使应用程序调用者和驱动的实现者看到的接口视角的一致性
则也算一种编程哲学:增强功能但是调用接口不变,一般的理解是增强功能要增加接口,但是sql包的实现几乎没有增加太多的调用接口而实现功能增强
并发的安全性支持
连接池的管理
为访问DB提供一个抽象体,看不到连接,连接完全在内部实现中隐藏了
面向接口编程
sql包的实现者教科书般的告诉我们实现抽象型平台型中间件的方法
抽象底层实现者接口
中间件面向接口层实现平台级层逻辑
对外提供一套统一的调用API,隔离底层实现者和上层调用者
基于该种思想可以抽象的平台型中间件有:
日志记录
记录到文件
记录到DB
写到网络
存放在内存
存放在DB
存放在文件
各种配置文件
DB
其他中间件
sql包中定义数据结构组合了driver层的接口变量和内部数据元素
这种可以看作golang独有的组合编程模式
层内高内聚,层间低耦合
隐藏实现的复杂性,通过接口粘合