介绍ent

Go在Facebook连通性中的状态 Tel Aviv​

20 个月前,我在使用 Go 进行了大约 5 年的编程并将其嵌入到几家公司后,加入了特拉维夫的 Facebook Connectivity (FBC) 团队。
我加入了一个正在开发一个新项目的团队,我们需要为此任务选择一种语言。我们比较了几种语言并决定使用 Go。

从那时起,Go 继续在其他 FBC 项目中传播,并取得了巨大的成功,仅在特拉维夫就有大约 15 名 Go 工程师。新服务现在用 Go 编写

在 Go 中编写新 ORM 的动机

在 Facebook 之前的 5 年里,我的大部分工作都是在基础设施工具和微服务上,没有太多的数据模型工作。一项需要对 SQL 数据库进行少量工作的服务使用了现有的开源解决方案之一,但一个使用复杂数据模型的服务是用另一种具有强大 ORM 的语言编写的。例如,带有 SQLAlchemy 的 Python。

在 Facebook,我们喜欢在图概念中考虑我们的数据模型。我们在内部对这个模型有很好的体验。
Go 缺乏适当的基于图的 ORM,导致我们在这里编写一个具有以下原则的 ORM:

  • Schema As Code模式即代码 - 定义类型、关系和约束应该在 Go 代码中(而不是结构标签),并且应该使用 CLI 工具进行验证。我们在 Facebook 内部拥有使用类似工具的良好经验。
  • 使用 codegen 的静态类型和显式 API -处处带有interface{} 的 API 会影响开发人员的效率;尤其是项目新手。
  • 查询、聚合和图遍历应该很简单——开发人员不想处理原始 SQL 查询或 SQL 术语。
  • 谓词应该是静态类型的。到处都没有字符串。
  • 完全支持context.Context- 这有助于我们全面了解我们的跟踪和日志系统,这对于取消等其他功能很重要。
  • 与存储无关- 我们尝试使用 codegen 模板保持存储层动态,因为开发最初是在 Gremlin (AWS Neptune) 上开始的,后来切换到 MySQL。

开源ent

ent是 Go 的一个实体框架 (ORM),使用上述原则构建。 ent可以轻松地在 Go 代码中定义任何数据模型或图形结构;模式配置由entc(ent codegen)验证,它生成一个惯用的静态类型 API,让 Go 开发人员保持高效和快乐。它支持 MySQL、MariaDB、PostgreSQL、SQLite 和基于 Gremlin 的图形数据库。

我们今天开源ent,邀请您开始使用 → entgo.io/docs/getting-started