包导入
基本导入
Go 中导入包可以使用 import 关键字。导入的包可以是标准库的包,也可以是第三方包,也可以是你自己写的包。
单行导入:
go
import "fmt"
import "math"多行导入:
go
import (
"fmt"
"math"
)别名导入
如果有同名冲突的包,可以使用别名来解决:
go
import (
"crypto/rand"
mrand "math/rand" // 将名称替换为mrand避免冲突
)如果导入的包名字很长,可以使用别名来简化:
go
import hwtm "helloworldtestmodule"点操作
在导入包时,可以使用 . 操作符来简化调用包中的函数。例如导入 fmt 包后,可以直接调用 fmt.Println 函数,而不需要写 fmt.。
go
import . "fmt"
func main() {
Println("Hello, World!")
}但是不推荐使用这种方式,因为会使代码变得难以阅读,也容易产生冲突
空白导入
如果导入的包没有使用,编译器会报错。但是有时候我们只是想导入包,而不使用包中的函数(有可能执行一些初始化任务),可以使用 _ 来代替包名,这样就不会报错了。
go
import _ "github.com/go-sql-driver/mysql"导入路径
Go 语言的包是通过导入路径来区分的。导入路径是唯一的,不同的包不能有相同的导入路径。导入路径可以是相对路径,也可以是绝对路径。绝对路径一般是指 github.com/username/projectname 这种形式。
包的初始化
Go 语言中包的初始化是自动的,当导入包时,会自动执行包中的 init 函数。init 函数没有参数,也没有返回值。init 函数在包中可以有多个,执行顺序是按照导入包的顺序执行的。
go
package main
import "fmt"
func init() { fmt.Println("init function") }
func main() { fmt.Println("main function") }
// 输出:
// init function
// main functioninit优先于main函数执行。init函数在包中只会执行一次,即使包被导入多次,init函数也只会执行一次。init函数是不能被调用的,只能在包中自动执行。init函数的执行顺序是按照导入包的顺序执行的,例如:import "a"; import "b";,则a包的init函数会先执行,然后是b包的init函数。- 如果一个包中有多个
init函数,执行顺序是按照代码中的顺序执行的。 - 如果一个包中有多个文件,每个文件中都有
init函数,执行顺序是按照文件名的字典序执行的。