golang里面有两个保留函数
main 函数(只能应用于package main)
init 函数(能够应用于所有的package)
go程序会自动调用 init()和main() 所以你不能在任何地方调用这两个函数
package main 必须包含一个main 函数,但是每个package中的init函数都是可选的
一个package 里可以写多个init函数,建议每个包中只写一个init函数
单个包中代码执行顺序如下
main包 --> 常量 -->全局变量 --> init函数 --> main函数 -->exit
多个包之间的代码执行顺序
先按层级import 包,从最后引入包中加载常量、变量、init(),返回上级包 继续执行 加载常量、变量、init()
defer关键字,延迟调用
go语言中没有其他面向对象的析构函数,但是go语言提供了defer语句用于实现其他面向对象语言的析构函数
defer常用于释放资源、接触锁定以及错误处理等
无论在函数内什么地方注册defer 语句,他都会在所属函数执行完毕后才会执行,并且如果注册了多个的defer语句,他们会按照后进先出(先进后出)得原则执行,所以一些资源我们开后就可以注册defer语句关闭。
package main
import "fmt"
func main(){
defer fmt.Println("我是第一个被注册,最后被打印,因为defer先进后出")
fmt.Print("我先被打印")
defer fmt.Println("我第二个被注册,但是先被打印")
}