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") }
相关文章推荐
- 翻译golang的一篇文章-Go 语言的错误处理
- Go语言错误处理
- Go语言错误处理小例子
- Go语言中错误处理实例分析
- Go 语言的错误处理机制引发争议
- Go语言项目的错误和异常管理 via 达达
- Go语言学习九:接口、错误处理
- Go语言中更优雅的错误处理
- go语言之 panic, recover ——如何在go语言中优雅的处理错误
- Go语言基础入门--函数,错误处理
- GO语言标准错误处理机制error用法实例
- go语言学习笔记(10) 错误处理
- Go语言中使用panic和recover简化错误处理
- Go语言错误处理
- Go语言错误处理
- GO 语言错误处理
- Go语言中的错误处理系统
- pyenv管理多版本python及常见错误处理
- Go 2将添加错误处理和泛型
- Go错误处理