Golang中的init函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang中的init函数相关的知识,希望对你有一定的参考价值。

参考技术A

init函数在包中定义,通常用来

除了下面讨论的一些差异之外,init函数中可以放任何常规函数可以放的东西

要使用导入的包,需要先将包初始化,初始化及顺序问题由Golang的 running system 完成。

Go里面的一个包可以包含多个文件。分布在众多包中的众多文件,变量和init函数执行的顺序应该是什么样子呢?之前的 文章 提到了变量的初始化顺序。完成此操作后,需要决定文件 a.go 或 z.go 中的变量初始化谁更应该早执行。 这取决于传递给编译器的文件顺序。 如果 z.go 首先由构建系统传递,则 z.go 先执行,然后在 a.go 的再执行。 这同样适用于init 函数的触发。 语言规范建议始终使用相同的顺序并按字典顺序从包中传递文件名:

不过依赖文件名初始化顺序的程序十分罕见,让我们来看这样子的例子

运行后,程序会这样输出

init 函数不需要参数也不返回任何值。和main不同,标识符init未声明,所以不能被引用

在编译时,程序返回

同一个包或文件中可以有很多个init函数,在不同文件中定义的init函数如下按照字母顺序执行,同一个文件按声明顺序执行,举例

输出

init函数的最常见用途,就是用来给那些不能通过表达式初始化的变量初始化,如:

表达式中可不能使用for循环,所以通过init函数来解决这个问题

Go对于未使用的引用非常严格。有些场景,你导入一个包,只为了执行其中的init函数(如mysql的driver)。

以上是关于Golang中的init函数的主要内容,如果未能解决你的问题,请参考以下文章

Golang的init函数

Golang中init函数作用

Golang:init函数与匿名函数介绍

Golang:init函数与匿名函数介绍

Golang:init函数与匿名函数介绍

一文读懂 Golang init 函数执行顺序