defer 语句
这玩意基本没啥作用,就是在一个函数中如果某行代码前面有defer 关键字的话,这行代码就最后执行,如果有多个defer语句的话,遵循后进先出的原则
例如:
fmt.Println("申请存储空间")defer fmt.Println("释放存储空间")fmt.Println("使用存储空间")fmt.Println("使用存储空间")fmt.Println("使用存储空间")复制代码
简化代码作用:
func ReadWrite() bool { file.Open("file") defer file.Close if failureX { // file.Close() retrun false } if failureY { //file.Close() return false } //file.Close return true}复制代码
总结:
1.defer语句的格式
defer 语句
2.defer语句的作用
延迟执行, 会在所属函数执行完毕之后再执行
常用于资源释放, 解锁, 错误处理等等
以前在C语言中我们说过, 通过malloc申请的存储空间, 一定更要释放free
但是由于我们不能写完malloc之后立即free,所以经常导致我们忘记释放
malloc -- >申请存储空间
... ... --> 使用存储空间
free --> 释放存储空间
注意点:
如果在同一个函数中编写了多个defer语句, 那么会遵守先进后出的原则
先注册的defer语句后执行, 后注册的defer语句先执行
init()函数
1.在Go语言中保留了两个函数, 一个叫做main,另外一个叫做init
main函数是由系统调用的, init函数也是由系统调用的复制代码
2.init函数的作用:
对当前文件进行初始化复制代码
3.调用顺序
main包 --> 常量 --> 全局变量 --> init函数 --> main函数 --> 执行逻辑代码 --> Exit程序复制代码
4.注意点:
main函数只能在main包中(package main), 并且一个程序只能有一个,但是init函数每个包中都可以有, 并且可以有多个(但是企业开发推荐只写一个)复制代码
上图是每个包中初始化的先后顺序
import几种形式
1.点操作
import{. "fmt"
}
func main {
Println("点操作")
}
2.起别名
import{f "fmt"
}
func main {
f.Println("起别名")
}
3._操作
只是调用包的init函数,不调用其他函数
import{_ "test"
}