
Go init函数的详细说明
初始化每个包后,会自动执行init()函数,并且执行优先级高于主函数的执行优先级。【相关推荐:Go视频教程】
init函数通常用于:
包初始化
为了使用导入的程序包,必须首先对其进行初始化。初始化始终在单个线程中执行,并且以程序包依赖关系的顺序执行。这由Golang的运行时系统控制,如下图所示:

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"
摘要
以上是本文的全部内容。希望本文的内容对您的学习或工作具有参考价值。
原文地址:https://developpaper.com/detailed-explanation-of-init-function-in-go-language/
译文地址:https://learnku.com/go/t/47178
更多编程相关知识,请访问:编程视频!!
Atas ialah kandungan terperinci 一文解析Golang中的init ()函数. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!
Bagaimana untuk menentukan pembolehubah dalam golang
Apakah kaedah penukaran data dalam golang?
Apakah perpustakaan yang biasa digunakan di golang?
Apakah perbezaan antara golang dan ular sawa
Penggunaan strncpy
Kaedah pemindahan pangkalan data MySQL
Apakah antara muka agp
Penggunaan fungsi keluar dalam bahasa c