Go 中导入包前的下划线符号是什么意思?
大家好!我刚开始学习 Go,遇到了一个我不理解的构造。在别人的代码中,我看到了一个包导入,包名前带有下划线(underscore):
```go
import (
"fmt"
_ "github.com/lib/pq"
"database/sql"
)
```
我知道 `_` 在 Go 中用作空白标识符(blank identifier),当我们想忽略函数的返回值时使用。但它在导入中做什么呢?因为如果我们导入一个包,通常会在代码中使用它,而这里明确表示我们不使用它(否则编译器会报错)。
我尝试删除这个导入,代码就无法工作了——编译器报错说找不到 PostgreSQL 的驱动。但是 `pq` 包本身在代码中任何地方都没有被使用。这怎么可能?这样的导入有什么用,它是如何工作的?
请用简单的话解释一下。我习惯了 Python,在 Python 中导入总是意味着显式使用模块,而这里有些神奇。