Go语言中的资源管理和出错处理

主要讲解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")
}

猜你喜欢

转载自my.oschina.net/ruoli/blog/1815948
今日推荐