1.1.1. init函数。

每一个源文件都可以包含一个 init 函数该函数会在 main 函数执行前,被 Go 运行框架调用,也就是说 init 会在 main 函数前被调用。

例子如下:

func init() {
    fmt.Println(" init()....... ")
}

func main() {
    fmt.Println(" main()....... ")
}

运行结果:

init().......

main().......

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

例子如下:

/**
    执行流程:
    1、先初始化全局变量。执行 test()函数
    2、init 函数
    3、main 函数
  */
var name  = test()

func test() string {
    fmt.Println(" test()....... ")
    return ""
}

func init() {
    fmt.Println(" init()....... ")
}

func main() {
    fmt.Println(" main()....... ")
}

运行结果:

test().......

init().......

main().......

1.2、 如果一个文件main包里面引入了其他包。那先加载引入包的所有源文件,对引入的包所有源文件执行:全局变量定义->init 函数;然后再执行main文件的:全局变量定义->init 函数->main 函数。

例子如下:

module1包的test.go文件内容:

package module1

import "fmt"

func init() {
    fmt.Println("module1 包 test 文件 init() 。。。。。。")
}

func Add(a int,b int) int  {
    fmt.Println("module1 包 test 文件 Add() 。。。。。。")
    return a + b
}

module1包的test2.go文件内容:

package module1

import "fmt"

func init() {
    fmt.Println("module1 包 test2 文件的  init() 。。。。。。")
}

main包的内容:

package main

import (
    "fmt"
    "hanShuDemo2/module1"
)

var name  = test()

func test() string {
    fmt.Println("main 包的 初始化全局变量 test()....... ")
    return ""
}

func init() {
    fmt.Println("main 包的 init()....... ")
}

func main() {
    fmt.Println("main 包的 main()....... ")
    module1.Add(4,5)
}

执行结果:

module1 包 test 文件 init() 。。。。。。

module1 包 test2 文件的 init() 。。。。。。

main 包的 初始化全局变量 test().......

main 包的 init().......

main 包的 main().......

module1 包 test 文件 Add() 。。。。。。

results matching ""

    No results matching ""