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

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

相关推荐
fthux4 小时前
装闭 RenoPit 源码解析(09):AnalysisEngine装修闭坑分析主流程
人工智能·ai·开源·github·open source·renopit
JackieDYH5 小时前
Git 与 GitHub 新电脑配置指南(从零开始)
git·github·工具·使用教程
Full Stack Developme9 小时前
SQL 注入 的历史及设计工作原理
数据库·sql
阿坤带你走近大数据10 小时前
SQL里where后面的1=1是干嘛的,走的是什么索引
数据库·sql
阿坤带你走近大数据10 小时前
SQL的执行顺序和书写顺序的介绍
数据库·sql·oracle
茶本无香11 小时前
Java调用Shell脚本执行SQL数据库操作:从入门到实战
java·sql·shell
码农颜12 小时前
5.6.2 ⾏级锁死锁
数据库·sql·oracle
云空15 小时前
《VPython 相关的 GitHub 仓库地址清单》
github·可视化·vpython
小弥儿17 小时前
GitHub今日热榜 | 2026-08-14:OSINT情报工具回流,本地AI赛道升温
人工智能·学习·开源·github
圣殿骑士-Khtangc18 小时前
Go错误处理最佳实践进阶从error到panic的完整指南
golang