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

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

相关推荐
lkbhua莱克瓦241 小时前
Java练习-正则表达式 1
java·笔记·正则表达式·github
007php0074 小时前
某游戏互联网大厂Java面试深度解析:Java基础与性能优化(一)
java·数据库·面试·职场和发展·性能优化·golang·php
姚远Oracle ACE5 小时前
Oracle AWR案例分析:精准定位SQL执行计划切换的时间点
数据库·sql·oracle
JanelSirry5 小时前
Redis服务器的的内存是多大
服务器·redis·github
稚麟6 小时前
GitHub Copilot CLI: How to get started
github·copilot
敲代码的嘎仔6 小时前
JavaWeb零基础学习Day6——JDBC
java·开发语言·sql·学习·spring·单元测试·maven
逛逛GitHub7 小时前
老外吹爆的国产开源 AI 大模型,登顶了开源热榜第 1。
github
哥哥还在IT中8 小时前
让数据库更智能-大模型如何优化我们的SQL查询
数据库·sql
天玺-vains9 小时前
借助Github Action实现通过 HTTP 请求触发邮件通知
网络协议·http·github