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

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

相关推荐
逛逛GitHub41 分钟前
GitHub 上 2300 人 Star 的 Claude Code 可视化工作流编辑器。
github
DICOM医学影像1 小时前
1. go语言从零实现以太坊客户端-JSON-RPC
golang·区块链·solidity·以太坊·web3.0·json-rpc·erc20
这儿有一堆花1 小时前
MusicFree:开源多平台聚合音乐软件
开源·github
乐12391 小时前
追飞机 icao数据库地址
sql
PXM的算法星球1 小时前
用 semaphore 限制 Go 项目单机并发数的一次流量控制优化实践
开发语言·后端·golang
数字游民95272 小时前
网站备案全流程回放(腾讯云)
人工智能·git·github·腾讯云·网站备案·waytoopc
ZNineSun2 小时前
GORM:Go的ORM 框架
golang·orm·gorm·crud
AI_56782 小时前
零基础学Linux:21天从“命令小白”到独立部署服务器
linux·服务器·人工智能·github
不知疲倦的仄仄2 小时前
第五天:深度解密 Netty ByteBuf:高性能 IO 的基石
java·开源·github
源代码•宸2 小时前
Golang语法进阶(定时器)
开发语言·经验分享·后端·算法·golang·timer·ticker