详解 go 语言中的 init () 函数 | go优质外文翻译 | go 技术论坛-380玩彩网官网入口
go init函数的详细说明
初始化每个包后,会自动执行init()函数,并且执行优先级高于主函数的执行优先级。init函数通常用于:
- 变量初始化
- 检查/修复状态
- 注册器
- 运行计算
包初始化
为了使用导入的程序包,必须首先对其进行初始化。初始化始终在单个线程中执行,并且以程序包依赖关系的顺序执行。这由golang的运行时系统控制,如下图所示:
- 初始化导入的包(递归导入)
- 计算并为块中声明的变量分配初始值
- 在包中执行初始化函数
initial.
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"
摘要
以上是本文的全部内容。希望本文的内容对您的学习或工作具有参考价值。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 cc 协议,如果我们的工作有侵犯到您的权益,请及时联系380玩彩网官网入口。
原文地址: