Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

go_engine #17

Closed
wants to merge 9 commits into from
Closed
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions docs/gop_sql_engine.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# 论go的mysql依赖库哪家合适
wu-jj marked this conversation as resolved.
Show resolved Hide resolved
1. "database/sql" 包:这是Go语言内置的数据库访问接口,可以与各种数据库进行交互,包括MySQL。它提供了一组通用的接口和方法,可以通过适配不同的数据库驱动程序来实现对MySQL的访问。
2. "github.com/go-sql-driver/mysql":这是一个流行的MySQL驱动程序,它实现了database/sql接口,可以直接在Go中使用。它提供了与MySQL数据库的连接、查询和事务等操作的功能。
3. "https://github.com/go-mysql-org/go-mysql":这是一个纯Go语言实现的MySQL客户端库,提供了对MySQL协议的底层访问。它具有较低级别的API,可用于实现自定义的MySQL客户端功能 //一些限制。由于它是底层的MySQL客户端库,使用它需要对MySQL协议有一定的了解,并且可能需要编写更多的代码来处理数据库操作

| 内置sql数据库接口 | go-sql-driver | go-mysql |
| --- | --- | --- |
| 标准化接口:database/sql是Go语言内置的数据库访问接口,提供了一套标准化的API,可以与多种数据库进行交互。这使得您可以在不更改代码的情况下切换不同的数据库驱动程序。 | 性能和兼容性:由于专门为MySQL数据库设计,"go-sql-driver/mysql"可以提供更好的性能和兼容性。它通过直接与MySQL服务器通信,利用MySQL的特定功能和优化,提供了更高效的数据库访问。 | 纯Go实现:作为一个纯Go语言实现的MySQL客户端库,"go-mysql/mysql"不依赖于外部C库,并且可以在不同平台上轻松构建和部署。这使得它更易于使用和维护。 | |
| 广泛的数据库支持:database/sql接口支持许多流行的数据库,如MySQL、PostgreSQL、SQLite等。通过使用适当的驱动程序,您可以轻松地连接和操作这些数据库。 | 社区支持:作为一个活跃的开源项目,"go-sql-driver/mysql"得到了广泛的社区支持和维护。它有一个活跃的社区,提供了丰富的文档、示例和解决方案,可以帮助您更好地使用和理解该驱动程序。 | 直接访问MySQL协议:"go-mysql/mysql"提供了对MySQL协议的底层访问,使您可以直接与MySQL服务器进行通信。这使得它可以更好地控制和优化与MySQL的交互,提供更高效的数据库访问。 | |
| 成熟和稳定:作为Go语言的一部分,database/sql接口经过广泛测试和使用,被认为是相对成熟和稳定的解决方案。它具有良好的文档和社区支持,可以帮助您解决问题和学习使用。 | | 高级功能支持:"go-mysql/mysql"提供了一些高级功能,如二进制协议支持、复制协议支持等。这些功能使您可以实现更复杂的数据库操作,如订阅MySQL二进制日志、实时数据同步等。button |


如果我们希望使用标准化的接口、支持多种数据库,并且更关注稳定性和一致性,那么Go语言内置的database/sql接口可能是一个不错的选择。如果我们更关注性能、兼容性和广泛的社区支持,可以考虑使用"go-sql-driver/mysql"。如果我们需要更高级的功能、纯Go实现以及直接访问MySQL协议的能力,那么"go-mysql/mysql"可能更适合我们的需求。


# database/sql
database/sql 具有如下特点:
- 统一的编程接口:database/sql 库提供了一组统一的接口,使得开发人员可以使用相同的方式操作不同的数据库,而不需要学习特定数据库的 API。
- 驱动支持:通过导入第三方数据库驱动程序,database/sql 可以与多种常见的关系型数据库系统进行交互,如 MySQL、PostgreSQL、SQLite 等。
- 预防 SQL 注入:database/sql 库通过使用预编译语句和参数化查询等技术,有效预防了 SQL 注入攻击。
- 支持事务:事务是一个优秀的 SQL 包必备功能。
![Alt text](image.png)


# go-sql-driver
一个流行的MySQL驱动程序,它实现了database/sql接口
"go-sql-driver/mysql"相比于Go语言内置的数据库访问接口(database/sql),具有以下几个方面的优势:
1. MySQL专用驱动程序:go-sql-driver/mysql是专门为MySQL数据库设计的驱动程序,因此它可以提供更好的性能和兼容性。它通过直接与MySQL服务器通信,利用MySQL的特定功能和优化,提供了更高效的数据库访问。
2. 支持额外功能:go-sql-driver/mysql提供了一些额外的功能和选项,可以更好地满足MySQL数据库的需求。例如,它支持连接池、事务隔离级别、批量插入等特性,可以提供更灵活和高级的数据库操作。
3. 更新和维护:go-sql-driver/mysql是一个活跃的开源项目,得到了广泛的社区支持和维护。它经常更新,修复bug并添加新功能,以适应MySQL数据库的最新变化和需求。
4. 生态系统支持:go-sql-driver/mysql是Go语言中使用最广泛的MySQL驱动程序之一,因此它具有丰富的生态系统和社区支持。您可以在社区中找到许多示例、文档和解决方案,以帮助您更好地使用和理解该驱动程序。
尽管go-sql-driver/mysql在许多方面优于内置的database/sql接口,但在某些情况下,使用内置接口也可能是合适的。例如,如果您希望保持代码的通用性,可以在需要时轻松切换到其他数据库,那么使用内置接口可能更合适。最终,您可以根据项目需求和偏好选择适合的数据库访问方式。
![Alt text](image-1.png)

# go-mysql/mysql
"go-mysql/mysql"相比于Go语言内置的数据库访问接口(database/sql),具有以下几个方面的优势:
1. 纯Go实现:go-mysql/mysql是一个纯Go语言实现的MySQL客户端库,不依赖于外部C库。这意味着您可以轻松地在不同平台上构建和部署您的应用程序,而无需担心C库的依赖性。
2. 直接访问MySQL协议:go-mysql/mysql提供了对MySQL协议的底层访问,使您可以直接与MySQL服务器进行通信。这使得它可以更好地控制和优化与MySQL的交互,提供更高效的数据库访问。
3. 高级功能支持:go-mysql/mysql提供了一些高级功能,如二进制协议支持、复制协议支持等。这些功能使您可以实现更复杂的数据库操作,如订阅MySQL二进制日志、实时数据同步等。
4. 性能和灵活性:由于直接访问MySQL协议,go-mysql/mysql可以提供高性能的数据库访问。它还具有灵活的API,可以满足各种不同的使用场景和需求。
尽管go-mysql/mysql在许多方面优于内置的database/sql接口,但它也有一些限制。由于它是底层的MySQL客户端库,使用它需要对MySQL协议有一定的了解,并且可能需要编写更多的代码来处理数据库操作
Binary file added static/image-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added static/image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.