为什么 import _ “github.com/go-sql-driver/mysql“ 要导入但不使用?_ 是什么意思?

go 复制代码
import _ "github.com/go-sql-driver/mysql"

这是 "匿名导入",它的目的是:执行该包的 init() 函数,但不使用包里的其他标识符(函数、变量等)。

为什么这样做?

以 MySQL 驱动为例,database/sql 是 Go 标准库,提供统一的数据库接口:

go 复制代码
sql.Open("mysql", "...")

你会发现这里的 "mysql" 是个字符串,但 database/sql 并不知道这个驱动实现在哪或者这个驱动是什么(因为有很多数据库驱动,这里只是一个字符串)。

所以:我们必须显式告诉 Go 去"注册"这个 "mysql" 驱动。

而 mysql 驱动包里的 init() 函数正好做了这件事:

✅ mysql 驱动内部大概这样写的:

go 复制代码
func init() {
    sql.Register("mysql", &MySQLDriver{})
}

所以你导入这个包的唯一目的就是:让它自动注册进 Go 的数据库驱动系统中。

✅ 为什么用 _?

_ 表示"匿名导入":只执行 init(),但不引入包名。

如果你写成普通导入:

go 复制代码
import "github.com/go-sql-driver/mysql"

编译器会报错:"imported and not used"。

因为你确实没有用到这个包里的任何显式符号。

相关推荐
7***31883 分钟前
Go-Gin Web 框架完整教程
前端·golang·gin
4***17544 分钟前
Linux 下安装 Golang环境
linux·运维·golang
ヽ格式化37 分钟前
一文读懂栈与堆:从生活例子到Golang/PHP内存管理实践
golang·php·生活
a***59262 小时前
【SQL技术】不同数据库引擎 SQL 优化方案剖析
数据库·sql
喂自己代言2 小时前
常见的关系型数据库有哪些?如何安装和使用Postgres?(中英双语版)
sql·postgresql·database
愚戏师3 小时前
MySQL SQL 注入
数据库·sql·mysql
逛逛GitHub4 小时前
5 个很火火的个人 AI 知识库 GitHub 项目,收藏一波。
github
世界尽头与你5 小时前
Go pprof 调试信息泄露漏洞
安全·网络安全·golang·渗透测试
小信啊啊5 小时前
Golang结构体内存布局
golang
6***v4175 小时前
搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程
开发语言·后端·golang