通八洲科技

如何使用Golang安装数据库驱动_支持MySQL和PostgreSQL

日期:2025-12-30 00:00 / 作者:P粉602998670
Go 里安装 MySQL 驱动用 github.com/go-sql-driver/mysql;需 go get 并在代码中 import _ "github.com/go-sql-driver/mysql",拼写错误或未导入会导致 unknown driver 错误。

Go 里安装 MySQL 驱动用哪个包?

Go 官方不提供数据库驱动,必须用第三方实现。github.com/go-sql-driver/mysql 是最主流、维护活跃的 MySQL 驱动,支持 database/sql 标准接口,无需额外抽象层。

安装命令就是:

go get github.com/go-sql-driver/mysql

注意:它**不是** go-sql-driver/mysql(少 github.com/ 就会报错),也**不是**旧版 github.com/Go-SQL-Driver/MySQL(大小写敏感,会拉不到包)。

常见错误现象:

PostgreSQL 驱动怎么选?

推荐用 github.com/lib/pq —— 虽然已归档(archive),但仍是生产环境最稳定的选择;或者用更现代的 github.com/jackc/pgx/v5(支持原生 pg 协议,性能更好,但 API 不完全兼容 database/sql)。

如果只用标准 database/sql 接口,装 lib/pq

go get github.com/lib/pq

如果要用 pgx 的高级特性(如连接池控制、类型映射、批量操作),且愿意接受非标准接口,装 v5:

go get github.com/jackc/pgx/v5

关键区别:

同一个项目里能同时用 MySQL 和 PostgreSQL 吗?

可以,但要注意驱动注册冲突和连接字符串格式差异。

两个驱动都必须显式导入(用 _ 空导入):

import (
    _ "github.com/go-sql-driver/mysql"
    _ "github.com/lib/pq"
)

连接字符串格式完全不同:

别把 MySQL 的 @tcp(...) 写进 PostgreSQL 连接串,或反过来用 sslmode 参数连 MySQL —— 会静默失败或报错如 dial tcp: lookup tcp on ...: no such host

为什么 go get 后还连不上数据库?

安装驱动只是第一步。真正连上需要三件事同时成立:

一个典型遗漏点:在 CI/容器环境里,数据库地址写成 127.0.0.1,但 Go 应用和 DB 不在同一网络命名空间,应改用服务名(如 mysqlpostgres)或宿主机网关 IP。