美文网首页
go init 函数

go init 函数

作者: 本能帅 | 来源:发表于2020-03-30 08:54 被阅读0次

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

1 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
2 每个包可以拥有多个init函数
3 包的每个源文件也可以拥有多个init函数
4 同一个包中多个init函数的执行顺序go语言没有明确的定义
5 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序
6 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

包的初始化

为了使用导入的包,首先必须将其初始化。初始化总是以单线程执行,并且按照包的依赖关系顺序执行。这通过Golang的运行时系统控制,如下图所示:

  1. 初始化导入的包(递归导入)
  2. 对包块中声明的变量进行计算和分配初始值
  3. 执行包中的init函数


    image.png

下面二个文件进行演示:
main.go

package main

import (
   "fmt"
)

var _ int64 = cc()

func init() {
   fmt.Println("main.init1")
}
func init() {
   fmt.Println("main. init2")
}

func cc() int64 {
   fmt.Println("calling cc() in main.go")
   return 1
}
func main() {

   fmt.Println("main.ing")
}

ap.go

package main

import "fmt"

func init() {
   fmt.Println("ap.init1")
}
func init() {
   fmt.Println("ap.init2")
}

执行 go build ap.go main.go,编译之后执行./main:

calling cc() in main.go
main.init1
main. init2
ap.init1
ap.init2
main.ing

可以得出的是:

1 一个package或者是go文件可以包含多个init函数,

 2 init函数是在main函数之前执行的,

 3 init函数被自动调用,不能在其他函数中调用,显式调用会报该函数未定义

执行顺序:解析变量 > init 函数 > main 函数

相关文章

  • Golang的Init函数和Main函数

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

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

  • go init()函数

  • go init函数

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

  • go init 函数

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

  • GO函数

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

  • 理解go中的init函数

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

  • Golang重要特征之init函数

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

  • go web 编程笔记

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

  • Go语言高级篇

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

网友评论

      本文标题:go init 函数

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