今天在使用go语言进行数据库连接的时候,发现了一种很特别的包导入方式
import (
_ "github.com/go-sql-driver/mysql"
"github.com/jinzhu/gorm"
)
包前面有个下划线,这是怎么意思呢?
怀着好奇的态度去研究了一下包的导入方式,发现有好几种特殊的导入方法,让我们一一去揭开它的神秘面纱。
- 正常导包
import (
"fmt" // 标准库
"./hello" // 相对路径导入,当前文件同一及的hello文件夹
"util/txt" // 绝对路径导入,加载 GOPATH/src/util/txt 模块
)
func main() {
fmt.Println("hello world!")
}
这是 go 语言最正常的导入包,fmt 是go语言的标准库,它是去 GOROOT 下加载该模块。
- 点导包
java 同学应该很好理解,她就是 java 中的静态导包
import {
. "fmt" // 在使用这个包下的方法时,可以省略前面的包名
}
func main() {
Println("hello world!") // 省略 fmt
}
- 别名导包
import {
f "fmt" // 给当前的 fmt 定义一个别名
}
func main() {
f.Println("hello world!") // fmt -> f
}
- 下划线导包
凡是下划线导入的包,会自动执行包下的所有 init()
方法,我感觉特别适合驱动的加载,比如数据库驱动
import {
_ "github.com/go-sql-driver/mysql" // 自动加载mysql驱动中的init方法
"github.com/jinzhu/gorm"
import {
当导入一个包时,它所有的init()函数就会被执行,但有些时候并非真的需要使用这些包,仅仅是希望它的init()函数被执 行而已。这个时候就可以使用_
操作引用该包了。即使用 _
操作引用包是无法通过包名来调用包中的导出函数,而是只是为了简单的调用其 init()
。