为什么 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"。

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

相关推荐
u1301307 小时前
GitHub 热榜项目:日榜(2026-10-17)
人工智能·github
泡海椒9 小时前
JQuick-SQL 快速开始:注册内存表并执行查询
数据库·windows·sql
roman_日积跬步-终至千里11 小时前
【数据Agent论文·查询与语义|06】RAT-SQL:怎样把问题、表和字段真正关联起来?
数据库·sql·数据分析
51ai12 小时前
学生用 AI 做了个 AI Agent:453 测试全过,求大佬说句真话——它算玩具还是工具?
github
_肆云13 小时前
GitHub CI/CD 全流程
ci/cd·github
本地化文档14 小时前
nix-ref-man-l10n
github·gitcode·mdbook·软件包管理器·nix
roman_日积跬步-终至千里15 小时前
【数据Agent论文·查询与语义|11】EntSQL:给了业务文档,模型为何还是写不对SQL?
数据库·人工智能·sql·数据分析
l1t18 小时前
修改两处,让SQLite求解数独SQL在datafusion上运行
服务器·数据库·sql
miofly19 小时前
OpenCode控制台密钥泄露事件:1.4%用户受影响,多方说法现分歧
开源·github
TunerT_TQ19 小时前
iPhone-use 静态工程评测:让 AI Agent 通过 USB 操作真实 iPhone,零依赖 MCP 与视觉坐标容灾架构
github