Go 语言基础——错误处理
#### 学习目标
掌握错误处理
掌握自定义错误处理
掌握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****
最新文章
- oracle序列为什么不是从1开始
- Android开发-API指南-<;supports-gl-texture>;
- DTCMS自定义标签,获取所有栏目文章列表TOP,以及文章通用URL
- 文档学习 - UILabel - 属性详解
- iOS开发UI篇——九宫格坐标计算
- 零拷贝概念 -- linux内核
- Fourier分析基础(二)——由级数导出连续Fourier变换
- 怎么轻松学习JavaScript
- [luogu2571][bzoj1857][SCOI2010]传送门【三分套三分】
- Leetcode 145
- 【Spring】3、BeanFactory 和 ApplicationContext的区别
- nginx 安装步骤
- php array_flip() 删除数组重复元素——大彻大悟
- 洛谷P1149 火柴棒等式
- sysbench工具使用
- RK3288 手动设置电池电量
- Java - 二分法查找(尚学堂第七章数组)
- arp hook
- 阿里云学生机——Mysql配置---教小白入门篇
- PIE SDK专题制图打开模板
热门文章
- MyBatis从入门到精通:使用XML方式(映射文件之类的)
- 【UVA - 10006 】Carmichael Numbers (快速幂+素数筛法)
- py+selenium+unittest遇到HTMLTestRunner_cn文件报错:ZeroDivisionError: float division by zero【已解决】
- 【LightOJ - 1370】Bi-shoe and Phi-shoe
- 洛谷 P4363 [九省联考2018]一双木棋chess 题解
- 《C# 语言学习笔记》——委托
- DedeCms常用内容调用标签实例大全
- github项目readme.md文件如何编写
- python 文件读写总结
- Java emoji持久化mysql