加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

go语言的init()方法怎样运用

发布时间:2023-07-07 14:52:11 所属栏目:语言 来源:
导读:这篇“go语言的init()方法如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这
这篇“go语言的init()方法如何使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go语言的init()方法如何使用”文章吧。
 
在go语言中,init()方法用于包的初始化;初始化每个包后,会自动执行init()函数,并且执行优先级高于主函数的执行优先级。init()方法通常用于:1、变量初始化;2、检查/修复状态;3、注册器;4、运行计算。init()函数在程序运行时,自动自动被调用执行,不能在代码中主动调用它。不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序。
 
Go init函数的详细说明
 
go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性
 
程序执行时导入包语句会自动触发包内部init()函数的调用。
 
初始化每个包后,会自动执行init()函数,并且执行优先级高于主函数的执行优先级。
 
需要注意的是:init()函数没有参数,也没有返回值。
 
init函数通常用于:
 
变量初始化
 
检查/修复状态
 
注册器
 
运行计算
 
init()函数在程序运行时,自动自动被调用执行,不能在代码中主动调用它。
 
结果是:
 
10
 
Hello 沙河
 
init()函数有下面的特点:
 
init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
 
每个包可以拥有多个init函数
 
包的每个源文件也可以拥有多个init函数
 
同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)
 
不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序
 
init函数不能被其他函数调用,而是在main函数执行之前,自动被调用
 
包初始化
 
为了使用导入的程序包,必须首先对其进行初始化。初始化始终在单个线程中执行,并且以程序包依赖关系的顺序执行。这由Golang的运行时系统控制,如下图所示:
 
初始化导入的包(递归导入)
 
计算并为块中声明的变量分配初始值
 
在包中执行初始化函数
 
go语言的init()方法如何使用
 
initial.go
 
package main
 
import "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 main
 
import "fmt"
 
func init(){
 
  fmt.Println("init")
 
}
 
func main(){
 
  init()
 
}
 
编译上述函数“undefined:init”时发生错误。
 
每个源文件可以包含一个以上的init函数,请记住,写在每个源文件中的“行进方式”只能包含一个init函数,这有点不同,因此进行下一个验证。
 
package main
 
import "fmt"
 
func init(){
 
  fmt.Println("init 1")
 
}
 
func init(){
 
  fmt.Println("init2")
 
}
 
func main(){
 
  fmt.Println("main")
 
}
 
/* 实施结果:
 
init1
 
init2
 
main */
 
从上面的示例中,您可以看到每个源文件可以包含多个init函数。
 
初始化函数的一个常见示例是设置初始表达式的值。
 
var precomputed=[20]float64{}
 
func init(){
 
  var current float64=1
 
  precomputed[0]=current
 
  for i:=1;i<len(precomputed);i++{
 
    precomputed[i]=precomputed[i-1]*1.2
 
  }
 
}
 
因为不可能在上面的代码(这是一条语句)中将for循环用作预先计算的值,所以可以使用init函数来解决此问题。
 
Go套件汇入规则的副作用
 
Go非常严格,不允许引用未使用的软件包。但是有时您引用包只是为了调用init函数进行一些初始化。空标识符(即下划线)的目的是解决此问题。
 
import _ "image/png"
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!