一、基本介绍
每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架调用,也就是说init会在main函数前被调用。
二、快速入门案例
package main
import (
"fmt"
)
/
//每一个源文件都可以包含一个init函数,该函数会在main函数执行前,
//被Go运行框架调用,也就是说init会在main函数前被调用
func init() {
fmt.Println("init()被调用。。。")
}
func main() {
fmt.Println("main()被调用。。。")
}
三、init函数使用细节和注意事项
1、如果一个文件同时包含全局变量定义,init函数和main函数,则执行的流程是
全局变量定义->init函数->main函数
Utils.go
package utils
import (
"fmt"
)
var IP =getIP()
func getIP() string {
fmt.Println("utils---------getIP---------")
return "127.0.0.1"
}
func init() {
fmt.Println("utils---------init---------")
}
func Test() {
fmt.Println("utils---------test---------")
}
Main.go
package main
import (
"fmt"
"go_code/grammar/function/init/code/utils"
)
var IP =getIP()
func getIP() string {
fmt.Println("main---------getIP")
return "127.0.0.1"
}
func init() {
fmt.Println("main---------init")
}
func main() {
fmt.Println("main1---------",utils.IP)
utils.Test()
fmt.Println("main---------main")
fmt.Println("main---------IP",IP)
fmt.Println("main---------",utils.IP)
utils.Test()
}
测试结果:
e:\GoProject\src\go_code\grammar\function\init\code\main>go run main.go
utils---------getIP---------
utils---------init---------
main---------getIP
main---------init
main1--------- 127.0.0.1
utils---------test---------
main---------main
main---------IP 127.0.0.1
main--------- 127.0.0.1
utils---------test---------
e:\GoProject\src\go_code\grammar\function\init\code\main>
2、面试题:main.go 和 utils.go 都含有 全局变量定义,init函数时,执行的流程又是怎么样的呢?
引入函数全局变量->引入函数init函数->main函数全局变量->main函数init函数->main函数
3、init函数最主要的作用,就是完成一些初始化的工作。初始化一些网络连接,数据库连接池等。
func init() {
//当服务器启动时,我们就去初始化我们的redis的连接池
initPool("localhost:6379", 16, 0, 300 * time.Second)
initUserDao()
}