[Go 编程语言] Gopher 我们一起来造个 ORM 吧!

可能绝大部分搞业务的同学逃不过 CRUD, 在编程中会有大量的工作与数据库打交道

常见的解决方案一般有以下三种, 1. 原生手写, 2. 开源 orm 类库, 3. 自研 orm 类库

诉求不同方案也就不同, 开发者在 高性能易用性 之前来回权衡, 做出符合自己实际情况的选择.

已经有很多优秀的开源库了 awesome-go-orms, 发起这个小活动的目的

  1. 学习如何设计一个对外 API 稳定的开源库
  2. 设计开源库时保持 api 稳定的情况下如果兼顾可扩展性 (自定义类型, Trace, Logger 等等)
  3. 数据模型抽象, 数据可能保存在 MySQL, MongoDB, Es 等不同的 BD, 甚至是三方 API 如果统一支持?
  4. 多跟优秀的人交流(比如正在看帖的你), 见贤思齐.

我们的思考方式: 我希望能支持 xxx, 这样做的好处是 xxx, 这样做有什么坏处吗, 其他项目是怎么实现的?

比如:

  1. 我希望能自动构造 SQL 语句, 这样做能灵活控制 SQL 条件, 避免硬编码, 坏处可能是出问题了不好定位 sql…
  2. 我希望能查询条件可以是 method(args …WhereOption) 的形式, 这样做可以根据请求中的参数动态构造约束, 对比链式调用的优势是…, 缺点是…

业余也根据以上方式实践了下 fly, 反复修改了很多次, 也尝试了泛型 /反射等的使用, 有很多地方还没有想清楚, 比如数据模型的描述上, 是用 Options 的模式, 还是 Struct tag 的模式, 优劣是什么 等, 这是一个纯学习性的讨论活动, 有兴趣的大佬们进群一起讨论吧.

这是企微群, 个人微信也可以直接加入, 企微主体是 “爱码士”, 我自己建的😂
用这个主要图他这个二维码是活码(其实就是一个中转页面, 进入后出现的那个是系统自动生成的当前可用的群二维码), 不会有 7 天过期(希望帖子能活到 7 天后😝)

contact_me_qr

发表评论

您的电子邮箱地址不会被公开。