比较 Go 中的 7 个最佳 ORM 包

对象关系映射器 (ORM) 是提供使用首选编程语言的数据类型和语法与 SQL 数据库交互的功能的工具。您可以使用 ORM 对数据库进行操作,而无需编写纯 SQL,因为典型的 ORM 提供了数据库抽象。

使用 ORM 代替使用内置数据类型的数据库有很多好处。例如,您可以将任何受支持的数据库与 ORM 一起使用,而无需对现有代码进行大量更改。此外,ORM 提高了开发人员的生产力并降低了开发成本。

Go 不是纯面向对象的语言,但使用 ORM 的体验类似于纯面向对象的语言,如 Python 和 C++。

Go 生态中有很多 ORM 包;大多数使用结构和接口的模式取决于他们的方法。

本文概述并比较了 Go 生态系统中的七个 ORM 包,为您的下一个项目提供有关最佳 ORM 的见解。

向前跳:

  • 高尔姆

  • SQLC:SQL 编译器

  • SQLX

  • 比戈

  • GORP

  • 火风暴

  • SQL锅炉

  • 比较 GO ORM 包

1. 高尔姆

GORM(Go-ORM)包是Go生态系统中最流行的ORM包。GORM 是一个对开发人员友好、功能丰富的 ORM,它构建在database/sql包之上,拥有您在 ORM 中需要的许多功能。

GORM 提供模式自动迁移、日志记录、上下文、准备好的语句、关联、约束、高级数据库操作(如分片)等功能。

GORM 包采用代码优先的方法,并使用结构作为与数据库交互的模型。该包还提供了在数据库上构建原始 SQL 查询以进行不受支持的操作的功能。


超过 20 万开发人员使用 LogRocket 来创造更好的数字体验了解更多 →


要使用 GORM 包并与数据库交互,您需要在工作区中安装数据库驱动程序和 GORM 包。GORM 为流行的 SQL 数据库(MySQL、SQLite、MSSQL、PostgreSQL)提供了一套数据库驱动程序,您可以使用自定义数据库驱动程序与您的数据库进行交互。

在工作目录的终端中运行此命令以安装 GORM 包。

去 -u gorm.io/gorm

GORM 包有很好的文档记录,其中的示例概述了它的所有特性、类型和方法。查看软件包文档以了解更多信息。

GORM 对开发人员非常友好并且很受欢迎,因为一旦开发人员了解了如何使用 Go 结构,GORM 包就可以直观地使用。

此外,GORM 不会牺牲您从编写原始 SQL 查询中获得的大部分功能。

2. SQLC:SQL 编译器

SQLC是一个 SQL 编译器 ORM 包,它从 SQL 生成类型安全的代码,以与具有 Go 数据类型的 SQL 数据库进行交互。SQLC 包实现了database/sql包数据类型的功能,如果您以前使用过该包,您会发现该包易于使用sql。

SQLC 采用模式优先的方法。定义架构和 SQL 查询后,您将运行 SQLC 命令为查询生成类型安全的代码接口,然后继续编写调用 SQLC 生成的代码的代码。

SQLC 包提供数据库查询、事务、配置和功能。

开始使用 SQLC 包是一个漫长的过程。根据您的操作系统和软件包,您必须在您的机器上安装二进制文件。

查看官方文档页面以了解有关 SQLC 包、安装说明以及如何使用该包的更多信息。

3.SQLX

SQLX 库为 Go 的内置database/sql包提供了扩展,以便与 Go 中的数据库进行更有效、更全面的交互。SQLX 包是向后兼容和可扩展的,因此您可以轻松地将它与该database/sql包和许多其他 ORM 包一起使用。

SQLX 包采用模式优先的方法,并提供将行编组为具有嵌入式结构支持的结构的功能,以及编组为映射和切片、准备好的语句等的功能。

如果您不是全功能 ORM 的粉丝并且您更喜欢使用database/sql具有额外支持和功能的包,您会发现 SQLX 包很有用。

查看SQLX 官方文档以了解如何使用该包和本指南以了解如何将 SQLX 与该database/sql包一起使用。

4. 比戈

Beego ORM是一个强大的 ORM,其灵感来自流行的 Python ORM,如 Django ORM 和 SQLAlchemy,用于在 Go 中轻松进行数据库交互。Beego ORM 是流行的 Beego Web 框架的一部分,用于在 Go 中构建 Web 应用程序。

Beego ORM 采用代码优先的方法,并通过流行的MySQL、PQ和Go-Sqlite3驱动程序提供与 MySQL、PostgreSQL 和 SQLite3 交互的支持。

Beego ORM 支持所有 Go 数据类型、数据库查询、表连接、原始 SQL 查询、映射、关系等。

使用 Beego ORM 与数据库交互类似于使用 GORM,Beego ORM 提供了 GORM 中缺少的命令行功能。


来自 LogRocket 的更多精彩文章:

  • 不要错过来自 LogRocket 的精选时事通讯The Replay

  • 使用 React 的 useEffect优化应用程序的性能

  • 在多个 Node 版本之间切换

  • 了解如何使用 AnimXYZ 为您的 React 应用程序制作动画

  • 探索 Tauri,一个用于构建二进制文件的新框架

  • 比较NestJS 与 Express.js

  • 发现TypeScript 领域中使用的流行 ORM


Beego ORM 在使用 Beego 框架构建 Web 应用程序的开发人员中很受欢迎,这是 Go 生态系统中最受欢迎的框架之一。

5. GORP

GORP是一个使用 Go 的内置数据类型与 Go 的 SQL 数据库交互的包。虽然技术上不是 ORM,但因为 Go 不是面向对象的,所以 Go Relational Persistence 包具有 ORM 提供的大部分功能。

GORP 在 Go 结构和 SQL 表之间创建映射,您可以将包与多种 SQL 方言一起使用。该包支持嵌入式结构映射、事务、来自结构的正向工程数据库模式、挂钩、数据库查询、切片绑定、测试、日志记录等等。

GORP 包采用代码优先的方法,就像 GORM 一样,您可以使用标签进行规范。GORP 使用反射来构造 SQL 查询和绑定参数,而不会牺牲太多性能。

6.去火风暴

Go-firestorm包是 Go 中用于 Google Cloud Firestore的快速、易于使用、非侵入性和非排他性的 ORM 包。该软件包支持新的 Firestore 本机模式,但不支持旧的Datastore模式。

Go-firestorm 包采用代码优先的方法,支持 CRUD 操作、搜索、并发请求、嵌套事务、循环引用、子集合、嵌入式结构、自定义映射、缓存以及在 Go 版本大于的 Google App Engine 上运行1.11。

疯狂题学习刷题App,小学一年级到大学考研,提高成绩的必备神器!

7. SQL锅炉

SQLBoiler包是一个模式优先的 ORM,旨在提高类型安全性和性能,同时减少使用 ORM 的缺点。SQLboiler 从您定义的数据库模式生成类型安全的模型。

SQLBoiler 包提供了完整的模型生成、预先加载、原始 SQL 回退、事务、模型挂钩、多模式支持和处理复杂表关系的功能。

您可以查看本文以了解有关 SQLBoiler 包以及如何在 Go 应用程序中使用 ORM 的更多信息。

比较 GO ORM 包

Go 生态系统中的 ORM 具有不同的特性、功能和专业领域。

选择 ORM 将取决于您正在构建的项目的因素,例如项目大小、您首选的数据库和 ORM 方法以及包的受欢迎程度。

如果您在开发过程中需要帮助,您可能更喜欢流行的软件包,如 GORM 和 Beego,它们有很多教程和更多的社区支持。

下表比较了本教程中讨论的 ORM 包、它们的方法、支持的数据库、开发人员体验和流行度。

高尔姆 SQLC SQLX 比戈 GORP 火风暴 SQL锅炉
方法 代码优先 模式优先 模式优先 代码优先 代码优先 代码优先 模式优先
支持的数据库 MySQL、MSSQL、PostgreSQL、SQLite 等等 database/sql支持的数据库 database/sql支持的数据库 MySQL、SQLite、PostgreSQL MySQL、SQLite、PostgreSQL 等 谷歌云优先 MySQL、MSSQL、PostgreSQL、SQLite、Cockroach DB
开发者经验 初学者到专家,对开发人员非常友好,易于使用 为类型安全做好准备 它使使用database/sql库变得有价值 广泛用于 Beego 框架 易于使用的代码优先 ORM 从 Go 应用程序与 Google Cloud Firestore 交互 高性能、直观且易于使用
人气(GitHub) 29.4k 明星 497 观看 3.3k 分叉 6.2k 明星 64 观看 427 分叉 12.5k 明星 196 观看 961 分叉 28.8k 星 1.2k 观看 5.5k 分叉 3.6k 明星 111 观看 378 分叉 35星 2看 7叉 5.1k 明星 77 观看 455 分叉

注意: Beego 流行度数据来自 Web 框架,而不仅仅是 ORM。

GORM 是榜单上最受欢迎的 ORM,基于 GitHub 的stars,在支持众多数据库的同时对开发者非常友好。

如果您不确定选择哪个 ORM,我的建议是如果您更喜欢代码优先的方法,请使用 GORM、Beego 或 GORP。

如果您对database/sql软件包感到满意并且需要额外的功能,我会推荐 SQLX 或 SQLC。

如果您更喜欢模式优先的方法并且有类型安全和性能问题,请选择 SQLBoiler 包。

最后,如果您使用 Google Cloud Firestore 作为数据库,我建议您使用 Go-firestorm 包。

结论

本文概述了 Go 生态系统中七个流行的 ORM 包、它们的特性、方法等。希望通过这些信息,您可以选择最适合您的项目的 ORM。

祝你好运!

LogRocket主动显示和诊断您的应用程序和网站中最重要的问题

成千上万的工程和产品团队使用LogRocket来减少了解技术和可用性问题的根本原因所需的时间。使用 LogRocket,您将减少与客户来回对话的时间,并消除无休止的故障排除过程。LogRocket 让您可以花更多时间构建新事物,而减少修复错误的时间。

你可能感兴趣的:(golang,数据库,sqlite)