主要讲解Go语言中的资源管理和出错处理
由于在资源管理时往往会出现错误,所以往往将资源管理和出错处理一起考虑
主要知识点:
- 初步认识defer,defer可以在return之前调用,即使函数中有panic 也会执行
- 一般在需要资源释放 或者 成对出现的业务逻辑时 使用 defer,例如:open/close,lock/unlock,printHead/printFooter
以下为代码示例:
package main
import (
"fmt"
"os"
"bufio"
)
// defer 初见 :可以在return之前调用,即使函数中有panic 也会执行
func tryDefer() {
defer fmt.Println(1)
defer fmt.Println(2)
fmt.Println(3)
panic("error")
return
defer fmt.Println(4) //在return 之后的语句不会执行
//最后输出结果,多个defer 定义 遵循先进后出的原则,最先定义的最后执行
// 3
// panic: error
// 2
// 1
}
//defer 在文件资源关闭时的使用
func wirteFile(fileName string) {
file ,err :=os.Create(fileName)
defer file.Close() //定义file后,立即设置file的关闭操作,防止后面忘记
if err !=nil{
panic(err)
}
writer := bufio.NewWriter(file)
defer writer.Flush() //定义writer后,立即设置 flush操作,防止后面忘记
for i:=0;i<20;i++ {
fmt.Fprintln(writer,i)
}
}
func main() {
//tryDefer()
wirteFile("test.txt")
}