时讯:go语言的init()方法有什么用

时间:2023-01-07 15:17:20       来源:PHP中文网

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

Go init函数的详细说明

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


(资料图片仅供参考)

程序执行时导入包语句会自动触发包内部init()函数的调用。

初始化每个包后,会自动执行init()函数,并且执行优先级高于主函数的执行优先级。

需要注意的是:init()函数没有参数,也没有返回值。

init函数通常用于:

变量初始化检查/修复状态注册器

运行计算

init()函数在程序运行时,自动自动被调用执行,不能在代码中主动调用它。

包初始化执行的顺序如下图所示:

结果是:

10Hello 沙河
登录后复制

init()函数有下面的特点:

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

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

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

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

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

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

包初始化

为了使用导入的程序包,必须首先对其进行初始化。初始化始终在单个线程中执行,并且以程序包依赖关系的顺序执行。这由Golang的运行时系统控制,如下图所示:

初始化导入的包(递归导入)计算并为块中声明的变量分配初始值在包中执行初始化函数

initial.go

package mainimport "fmt"var _ int64=s()func init(){  fmt.Println("init function --->")}func s() int64{  fmt.Println("function s() --->")  return 1}func main(){  fmt.Println("main --->")}
登录后复制

执行结果

function s() —>init function —>main —>
登录后复制

即使程序包被多次导入,初始化也只需要一次。

特性介绍

init函数不需要传入参数,也不需要返回任何值。与main相比,init没有声明,因此无法引用。

package mainimport "fmt"func init(){  fmt.Println("init")}func main(){  init()}
登录后复制

编译上述函数“undefined:init”时发生错误。

每个源文件可以包含一个以上的init函数,请记住,写在每个源文件中的“行进方式”只能包含一个init函数,这有点不同,因此进行下一个验证。

package mainimport "fmt"func init(){  fmt.Println("init 1")}func init(){  fmt.Println("init2")}func main(){  fmt.Println("main")}/* 实施结果:init1init2main */
登录后复制

从上面的示例中,您可以看到每个源文件可以包含多个init函数。

初始化函数的一个常见示例是设置初始表达式的值。

var precomputed=[20]float64{}func init(){  var current float64=1  precomputed[0]=current  for i:=1;i登录后复制

因为不可能在上面的代码(这是一条语句)中将for循环用作预先计算的值,所以可以使用init函数来解决此问题。

Go套件汇入规则的副作用

Go非常严格,不允许引用未使用的软件包。但是有时您引用包只是为了调用init函数进行一些初始化。空标识符(即下划线)的目的是解决此问题。

import _ "image/png"
登录后复制

【相关推荐:Go视频教程、编程教学】

以上就是go语言的init()方法有什么用的详细内容,更多请关注php中文网其它相关文章!

关键词: 有什么用 如下图所示 可以拥有