3. Go 中的init函数

1. 概述

每一个源文件都可以有一个init函数,这个函数会在main函数运行之前,被Go框架所调用。

2. init 函数的特征

  • init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等

  • 每个包可以拥有多个init函数

  • 包的每个源文件也可以拥有多个init函数

  • 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)

  • 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序

  • init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

3. init函数的注意事项和细节

  • 如果一个文件同时包含全局变量的定义,init函数,main函数和全局变量的定义的执行流程:

    init

    1
    2
    3
    graph LR
    A[全局变量定义] --> B(init 函数)
    B --> C(main函数)
  • init函数最主要的作用就是完成初始化工作

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
*
* @Author fchunbo
* @Date 2018-12-10 19:19
*/
package main

import (
"fmt"
"ideaProject/initDemo/util"
)

// 先执行变量定义
var age = test()
var name string

func test() int {
fmt.Println("test ...")
return 0
}

// 再执行init函数
func init() {
name = "Jery"
fmt.Println("main age init .....")
}

// 最后执行main函数
func main() {
fmt.Println("do main.... ")
fmt.Println("Age = ", util.Age, ", Name = ", util.Name)
}
# Go
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×