1、defer语句
package main
import "fmt"
func main() {
/*
1.defer语句的格式
defer 语句
2.defer语句的作用
延迟执行, 会在所属函数执行完毕之后再执行
常用于资源释放, 解锁, 错误处理等等
以前在C语言中我们说过, 通过malloc申请的存储空间, 一定更要释放free
但是由于我们不能写完malloc之后立即free,所以经常导致我们忘记释放
malloc -- >申请存储空间
... ... --> 使用存储空间
free --> 释放存储空间
注意点:
如果在同一个函数中编写了多个defer语句, 那么会遵守先进后出的原则
先注册的defer语句后执行, 后注册的defer语句先执行
*/
//fmt.Println("申请存储空间")
//defer fmt.Println("释放存储空间")
//fmt.Println("使用存储空间")
//fmt.Println("使用存储空间")
//fmt.Println("使用存储空间")
defer fmt.Println("第一条语句")
defer fmt.Println("第二条语句")
defer fmt.Println("第三条语句")
defer fmt.Println("第四条语句")
}
结果
第四条语句
第三条语句
第二条语句
第一条语句
Process finished with exit code 0
2、init()函数
package main
import "fmt"
import "test"
// 2.
const MAX_VALUE = 666
// 3.
var num int = getNumber()
// 4.
func init() {
fmt.Println("init函数1")
}
func init() {
fmt.Println("init函数2")
}
// 5.
func main() {
/*
1.在Go语言中保留了两个函数, 一个叫做main,另外一个叫做init
main函数是由系统调用的, init函数也是由系统调用的
2.init函数的作用:
对当前文件进行初始化
3.调用顺序
main包 --> 常量 --> 全局变量 --> init函数 --> main函数 --> 执行逻辑代码 --> Exit程序
4.注意点:
main函数只能在main包中(package main), 并且一个程序只能有一个,
但是init函数每个包中都可以有, 并且可以有多个(但是企业开发推荐只写一个)
*/
fmt.Println("main函数")
test.getValue()
}
func getNumber() int {
fmt.Println("返回全局变量需要的值")
return 888
}