美文网首页golang
理解go中的init函数

理解go中的init函数

作者: wenmingxing | 来源:发表于2018-07-09 21:36 被阅读174次

本文主要介绍go中init函数的使用及意义。

I、init的几个特征

1、init函数用于包的初始化,如初始化包中的变量,这个初始化在package xxx的时候完成,也就是在main之前完成;

2、每个包可以拥有多个init函数, 每个包的源文件也可以拥有多个init函数;

3、同一个包中多个init函数的执行顺序是没有明确定义的,但是不同包的init函数是根据包导入的依赖关系决定的。

4、init函数不能被其他函数调用,其实在main函数之前自动执行的。

II、例程

2.1 在main函数之前执行init
//test1
package main 

import "fmt"

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


func init() {
    fmt.Println("do in init1")
}

func init() {
    fmt.Println("do in init2")
}  

运行结果:

这个例子的运行结果说明:init函数在main函数之前执行,每个源文件中可以包含多个init函数。

2.2 init函数的执行顺序

现在我们init目录下的文件内容如下:

三个go程序代码分别如下所示:

// test.go
package main  

import (
    "fmt"
    _ "./level1"
)

func main() {
    fmt.Println("I am in main")
}  
// level1.go
package level1  

import (
    "fmt"
    _ "../level2"
)

func init() {
    fmt.Println("I am in level1")
}  
// level2.go  
package level2 

import "fmt"  

func init() {
    fmt.Println("I am in level2")
}  

运行test.go执行结果如下:

通过运行结果可以看出,go中不同包中init函数的执行顺序是根据包的导入关系决定的。

并且这种关系为:

III、关于import _ " "的说明

我们都知道,go对包导入非常严格,不允许导入不使用的包。但是有时候我们导入包只是为了做一些初始化的工作,这样就应该采用import _ " "的形式,如第II节的例程中我们采用了import _ " "的形式导入level1和level2包,这样就可以在只完成初始化,也不会报错。

【参考】

[1] 《The way to go》

相关文章

  • 理解go中的init函数

    本文主要介绍go中init函数的使用及意义。 I、init的几个特征 1、init函数用于包的初始化,如初始化包中...

  • init()函数 先导入的包的init函数先执行 init()函数和main()函数 这两个函数都是go中的保留函...

  • Golang的Init函数和Main函数

    Init函数和main函数 go语言中的init函数用于包package初始化。该函数时go语言的一个重要特性in...

  • Go语言高级篇

    init函数 结论: 在同一个package中,可以多个go文件中定义init方法 在同一个go文件中,可以重复定...

  • go init()函数

  • go init函数

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

  • go init 函数

    go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性,有下面的特征: 包的初始化...

  • GO函数

    init 函数: 每一个源文件都可以有一个init函数,该函数会在main函数执行前,被go运行框架调用。 作用:...

  • Golang重要特征之init函数

    go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性 inti函数主要特征: 1...

  • go web 编程笔记

    函数 go函数接受变参func x(arg ...init)int {} defer defer 会按照后进先出的...

网友评论

    本文标题:理解go中的init函数

    本文链接:https://www.haomeiwen.com/subject/ostxpftx.html