共计 913 个字符,预计需要花费 3 分钟才能阅读完成。
概述
init() 函数
是一个非凡的函数,个别称为初始化函数,不能被调用。 在每个文件外面,当程序启动或者文件被作为包援用的时候,
init() 函数就会主动执行,个别用来做一些包的初始化操作。
语法规定
init() 函数
没有参数,也没有返回值。
func init() {// do something}
执行程序
包的初始化函数依照程序中引入的程序执行,依赖于具体的程序优先级,每次初始化一个包。
例如 包 a
引入了 包 b
, 那么确保 包 b
的初始化操作 在 包 a
的初始化操作之前实现。
初始化过程是自下而上的,main 包
最初初始化,也就是说,在 main 函数
执行前,
所援用到的包曾经全副初始化实现。
import -> const -> var -> init() -> main()
例子
包变量初始化
package main
import "fmt"
var (
pageIndex int
pageSize int
)
func init() {
pageIndex = 1
pageSize = 20
}
func main() {fmt.Printf("page index = %d\n", pageIndex)
fmt.Printf("page size = %d\n", pageSize)
}
// $ go run main.go
// 输入如下
/**
page index = 1
page size = 20
*/
多个包之间援用初始化程序
新建一个目录 A
, 并将如下代码写入 A/a.go
文件
// 定义包 A
package A
func init() {println("hello A")
}
新建一个目录 B
, 并将如下代码写入 B/b.go
文件
// 定义包 B
package B
import "A" // 包 B 援用包 A
func init() {println("hello B")
}
将如下代码写入 main.go
文件
package main
import "B" // 包 main 援用包 B
func init() {println("hello main")
}
func main() {println("hello world")
}
// $ go run main.go
// 输入如下
/**
hello A
hello B
hello main
hello world
*/
reference
- https://book.douban.com/subje…
分割我
正文完