Go 里安装 MySQL 驱动用 github.com/go-sql-driver/mysql;需 go get 并在代码中 import _ "github.com/go-sql-driver/mysql",拼写错误或未导入会导致 unknown driver 错误。
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(大小写敏感,会拉不到包)。
常见错误现象:
cannot find package "github.com/go-sql-driver/mysql":GOPATH 或 Go Modules 未启用,或拼写错误sql: unknown driver "mysql" (forgotten import?):只执行了 go get,但没在代码里 import _ "github.com/go-sql-driver/mysql"
推荐用 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
关键区别:
lib/pq:导入后注册 "postgres" 驱动,和 mysql 一样走 database/sql
pgx:默认不注册驱动,需显式调用 pgx.Connect();若硬要塞进 sql.Open("pgx", ...),得额外引入 github.com/jackc/pgx/v5/pgxpool 并配好驱动注册可以,但要注意驱动注册冲突和连接字符串格式差异。
两个驱动都必须显式导入(用 _ 空导入):
import (
_ "github.com/go-sql-driver/mysql"
_ "github.com/lib/pq"
)连接字符串格式完全不同:
"user:password@tcp(127.0.0.1:3306)/dbname?parseTime=true"
"host=localhost port=5432 user=me dbname=test sslmode=disable"(lib/pq)或 "postgresql://me@localhost:5432/test?sslmode=disable"(pgx)别把 MySQL 的 @tcp(...) 写进 PostgreSQL 连接串,或反过来用 sslmode 参数连 MySQL —— 会静默失败或报错如 dial tcp: lookup tcp on。
...: no such host
go get 后还连不上数据库?安装驱动只是第一步。真正连上需要三件事同时成立:
import _ "xxx"(不能只 go get)mysql -h ... 或 psql -h ... 手动验证)db.Ping() 检查连接,而不是只调 sql.Open()(后者只初始化连接池,不真正拨号)一个典型遗漏点:在 CI/容器环境里,数据库地址写成 127.0.0.1,但 Go 应用和 DB 不在同一网络命名空间,应改用服务名(如 mysql、postgres)或宿主机网关 IP。