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

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

相关推荐
passerby60615 小时前
完成前端时间处理的另一块版图
前端·github·web components
草梅友仁6 小时前
墨梅博客 1.4.0 发布与开源动态 | 2026 年第 6 周草梅周报
开源·github·ai编程
麦聪聊数据7 小时前
Web 原生架构如何重塑企业级数据库协作流?
数据库·sql·低代码·架构
学电子她就能回来吗8 小时前
深度学习速成:损失函数与反向传播
人工智能·深度学习·学习·计算机视觉·github
Tony Bai9 小时前
再见,丑陋的 container/heap!Go 泛型堆 heap/v2 提案解析
开发语言·后端·golang
Apple_羊先森10 小时前
ORACLE数据库巡检SQL脚本--19、磁盘读次数最高的前5条SQL语句
数据库·sql·oracle
xuhe211 小时前
[全流程详细教程]Docker部署ClawBot, 使用GLM4.7, 接入TG Bot实现私人助理. 解决Docker Openclaw Permission Denied问题
linux·docker·ai·github·tldr
念何架构之路12 小时前
Go进阶之panic
开发语言·后端·golang
先跑起来再说12 小时前
Git 入门到实战:一篇搞懂安装、命令、远程仓库与 IDEA 集成
ide·git·后端·elasticsearch·golang·intellij-idea
l1t12 小时前
DeepSeek总结的PostgreSQL的GPT推理SQL移植到DuckDB的性能优化方法
sql·gpt·postgresql