go database/sql 源码分析 -题外篇

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

第一篇go database/sql 源码分析 的文章对其作者(Brad Fitzpatrick大神 memcached的作者 go语言项目组成员)给予高度评价,但是个人认为go database/sql 的实现不是完美无瑕的


优点:
接口设计简单,清晰,一致,友好:应用层的调用接口和驱动层的实现接口几乎一致,使用者毫无压力;


缺点:
包内部实现异常复杂、杂乱,给人一种错觉到底是因为逻辑就复杂还是实现的有问题;
这也是大牛的特点,你不要管我的实现,我只要保持接口的清晰,你只管用就好了,至于内部实现是我自己的事情,我不保证可读性,我可以使用我认为的任何技巧;


个人觉得database/sql包内部实现的不科学的地方:


1.为了实现并发,大量的使用锁的结构: 这个有违golang 的编程哲学,但是有时锁确实是解决办法的好省力办法,但是太多的锁分布在代码中,会使代码非常难看;


2.包中各个实体资源的复用、回收、清理等逻辑不够清晰,异常混乱,阅读代码很难搞清楚各个实体是怎么个依赖关系,怎么个生存期;严重怀疑作者是怎么去设计、怎么去测试,
是我水平不够,总是感觉实现不够优雅,后来想想database/sql的作者,Brad Fitzpatrick大神毕竟也不是等闲之辈,是我功力不够了,仍需加油。
不过我对大神不是无条件的崇拜,如果是我来实现database/sql,有什么更好的方式,这个确实是自己应该思考的问题;


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

本文来自:CSDN博客

感谢作者:hittata

查看原文:go database/sql 源码分析 -题外篇

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

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