您的位置:首页 > 编程语言 > Go语言

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

2018-05-21 12:42 696 查看

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


错误处理

Go语言在调用方法是 可能会返回错误,error 错误类型是一个接口,是一个上层错误,我们需要将这个错误转成我们自己的业务错误,然后做对应的错误处理操作

示例代码如下:

package main

import (
"fmt"
"os"
)

func writeFile(filename string) {
file, err := os.OpenFile(filename, os.O_EXCL|os.O_CREATE|os.O_WRONLY, 0666)

if err != nil {
//此处将错误转为 PathError 类型,真实处理业务中,可能需要多次判断,各自处理
if pathError, ok := err.(*os.PathError); !ok {
panic(err)
} else {
fmt.Printf("%s, %s, %s\n",
pathError.Op,
pathError.Path,
pathError.Err)
}
return
}
defer file.Close()
}

func main() {
writeFile("test.txt")
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Go