#### 学习目标

掌握错误处理

掌握自定义错误处理

掌握defer关键字的使用

------

#### 错误处理

GO没有异常处理机制

Go语言引入了一个关于错误处理的标准模式,即error接口,该接口的定义如下:
type error interface {

​ Error() string

}

可以通过errors.New快速创建错误实例

```go
errors.New("错误信息")
```

```go
func Foo(param int)(n int, err error) {
// ...
}

//调用时的代码建议按如下方式处理错误情况:
n, err := Foo(0)

if err != nil {
// 错误处理
} else {
// 使用返回值n
}
```

#### 自定义error类型

#### defer关键字

```go
func CopyFile(dst, src string) (w int64, err error) {
srcFile, err := os.Open(src)
if err != nil {
return
}

defer srcFile.Close()

dstFile, err := os.Create(dstName)
if err != nil {
return
}

defer dstFile.Close()

return io.Copy(dstFile, srcFile)
}
```

类似于Java中的finally

一个函数中可以存在多个defer语句

defer语句的调用是遵照 先进后出的原则,即后一个defer语句将先被执行。

#### painc与recover

####

panic用于不可以恢复的错误

panic退出前会执行defer指定的内容

错误恢复

```go
defer func() {
if err :=recover();err != nil {
//恢复错误
}
}()
```

os.Exit 退出

os.Exit直接终止程序不会调用defer指定的函数

os.Exit退出时不会输出当前用调用栈信息

------
**** 码字不易如果对你有帮助请给个关注****

**** 爱技术爱生活 QQ群: 894109590****

最新文章

  1. oracle序列为什么不是从1开始
  2. Android开发-API指南-<supports-gl-texture>
  3. DTCMS自定义标签,获取所有栏目文章列表TOP,以及文章通用URL
  4. 文档学习 - UILabel - 属性详解
  5. iOS开发UI篇——九宫格坐标计算
  6. 零拷贝概念 -- linux内核
  7. Fourier分析基础(二)——由级数导出连续Fourier变换
  8. 怎么轻松学习JavaScript
  9. [luogu2571][bzoj1857][SCOI2010]传送门【三分套三分】
  10. Leetcode 145
  11. 【Spring】3、BeanFactory 和 ApplicationContext的区别
  12. nginx 安装步骤
  13. php array_flip() 删除数组重复元素——大彻大悟
  14. 洛谷P1149 火柴棒等式
  15. sysbench工具使用
  16. RK3288 手动设置电池电量
  17. Java - 二分法查找(尚学堂第七章数组)
  18. arp hook
  19. 阿里云学生机——Mysql配置---教小白入门篇
  20. PIE SDK专题制图打开模板

热门文章

  1. MyBatis从入门到精通:使用XML方式(映射文件之类的)
  2. 【UVA - 10006 】Carmichael Numbers (快速幂+素数筛法)
  3. py+selenium+unittest遇到HTMLTestRunner_cn文件报错:ZeroDivisionError: float division by zero【已解决】
  4. 【LightOJ - 1370】Bi-shoe and Phi-shoe
  5. 洛谷 P4363 [九省联考2018]一双木棋chess 题解
  6. 《C# 语言学习笔记》——委托
  7. DedeCms常用内容调用标签实例大全
  8. github项目readme.md文件如何编写
  9. python 文件读写总结
  10. Java emoji持久化mysql