概述

init() 函数 是一个非凡的函数,个别称为初始化函数,不能被调用。 在每个文件外面,当程序启动或者文件被作为包援用的时候,
init() 函数就会主动执行,个别用来做一些包的初始化操作。

语法规定

init() 函数 没有参数,也没有返回值。

func init() {    // do something}

执行程序

包的初始化函数依照程序中引入的程序执行,依赖于具体的程序优先级,每次初始化一个包。
例如 包 a 引入了 包 b, 那么确保 包 b 的初始化操作 在 包 a 的初始化操作之前实现。
初始化过程是自下而上的,main 包 最初初始化,也就是说,在 main 函数 执行前,
所援用到的包曾经全副初始化实现。

import -> const -> var -> init() -> main()

例子

包变量初始化

package mainimport "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 文件

// 定义包 Apackage Afunc init() {    println("hello A")}

新建一个目录 B, 并将如下代码写入 B/b.go 文件

// 定义包 Bpackage Bimport "A" // 包 B 援用包 Afunc init() {    println("hello B")}

将如下代码写入 main.go 文件

package mainimport "B" // 包 main 援用包 Bfunc init() {    println("hello main")}func main() {    println("hello world")}// $ go run main.go// 输入如下 /**  hello A  hello B  hello main  hello world*/

reference

  1. https://book.douban.com/subje...

分割我