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

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

相关推荐
会跑的葫芦怪1 小时前
Go语言在区块链开发中的应用场景详解
golang·区块链
秦禹辰1 小时前
开源多场景问答社区论坛Apache Answer本地部署并发布至公网使用
开发语言·后端·golang
阿正的梦工坊1 小时前
介绍 SWE-bench:语言模型能否解决真实世界的 GitHub 问题?
人工智能·语言模型·github
学IT的周星星2 小时前
《MyBatis变形记:当SQL遇上“智能管家“》
数据库·sql·mybatis
野老杂谈3 小时前
Hive SQL 中的时间戳转换详解
hive·hadoop·sql
嘉禾望岗5033 小时前
hive SQL查询与函数
hive·hadoop·sql
数据知道4 小时前
Go基础:常用数学函数处理(主要是math包rand包的处理)
开发语言·后端·golang·go语言
学习同学4 小时前
从0到1制作一个go语言服务器 (一) 配置
服务器·开发语言·golang
数据知道4 小时前
Go基础:文件与文件夹操作详解
开发语言·后端·golang·go语言
gopyer4 小时前
180课时吃透Go语言游戏后端开发2:Go语言中的变量
开发语言·游戏·golang·游戏后端开发