异常处理

error

error接口定义:

type error interface {Error() string
}

需要实现Error()方法返回一个字符串
两种构造error的方式:
第一种:errors.New()

err := errors.New("This is an error")
if err != nil {fmt.Print(err)
}

第二种:fmt.Errorf()

err := fmt.Errorf("This is an error")
if err != nil {fmt.Print(err)
}

自定义错误:

type NotNature float64func (err NotNature) Error() string {return fmt.Sprintf("自然数为大于或等于0的数: %v", float64(err))
}func Nature(x float64) (float64,error) {if x<0 {return 0,NotNature(x)} else {return x,nil}
}func main() {fmt.Println(Nature(1))fmt.Println(Nature(-1))
}
  • 1.如果函数需要处理异常,通常将error作为多值返回的最后一个值,返回的error值为nil则表示无异常,非nil则是有异常。
  • 2.一般先用if语句处理error!=nil,正常逻辑放if后面。

Go语言的error代表的并不是真“异常”,只是通过返回error来表示错误信息,换句话说,不是运行时错误范围预定义的错误,某种不符合期望的行为并不会导致程序无法运行(自然数函数例子),都应使用error进行异常处理。当程序出现重大错误,如数组越界,才会将其当成真正的异常,并用panic来处理。

panic

只有panic时,后面的程序就不执行了,可用recover恢复

package mainimport "fmt"func main(){defer func(){fmt.Println("我是defer里面第一个打印函数")if err:=recover();err!=nil{fmt.Println(err)}fmt.Println("我是defer里面第二个打印函数")}()f()
}func f(){fmt.Println("1")panic("我是panic")fmt.Println("2")
}

输出:

1
我是defer里面第一个打印函数
我是panic
我是defer里面第二个打印函数

Go组队学习 9.异常处理相关推荐

  1. 【Datawhale组队学习Pytorch】Task 完结篇

    [项目简介] PyTorch是利用深度学习进行数据科学研究的重要工具,在灵活性.可读性和性能上都具备相当的优势,近年来已成为学术界实现深度学习算法最常用的框架.考虑到PyTorch的学习兼具理论储备和 ...

  2. Python基础组队学习

    文章目录 Python基础组队学习 Task1变量.运算符与数据类型及位运算 练习题 Task2 条件语句,循环语句 练习题 task3异常处理 练习题 task4列表.元组和字符串 列表 练习题 列 ...

  3. 四月青少年编程组队学习(Python一级)Task02

    电子学会 软件编程(Python)一级 组队学习 试题来源 青少年软件编程(Python)等级考试试卷(一级)[2020.06] 青少年软件编程(Python)等级考试试卷(一级)[2020.09] ...

  4. 四月青少年编程组队学习(Python一级)Task01

    电子学会 软件编程(Python)一级 组队学习 试题来源 青少年软件编程(Python)等级考试试卷(一级)[2020.06] 青少年软件编程(Python)等级考试试卷(一级)[2020.09] ...

  5. 四月青少年编程组队学习(图形化四级)Task05

    电子学会 软件编程(图形化)四级 组队学习 试题来源: 青少年软件编程(Scratch)等级考试试卷(四级)[2019.12] 青少年软件编程(Scratch)等级考试试卷(四级)[2020.06] ...

  6. 四月青少年编程组队学习(图形化四级)Task03

    电子学会 软件编程(图形化)四级 组队学习 试题来源: 青少年软件编程(Scratch)等级考试试卷(四级)[2019.12] 青少年软件编程(Scratch)等级考试试卷(四级)[2020.06] ...

  7. 四月青少年编程组队学习(图形化四级)Task01

    电子学会 软件编程(图形化)四级 组队学习 试题来源: 青少年软件编程(Scratch)等级考试试卷(四级)[2019.12] 青少年软件编程(Scratch)等级考试试卷(四级)[2020.06] ...

  8. 【组队学习】【35期】深入浅出Pytorch

    深入浅出Pytorch 航路开辟者:李嘉骐.牛志康.刘洋.陈安东 领航员:朱松青 航海士:管柯琴.宋泽山.林旭升 基本信息 开源内容:https://github.com/datawhalechina ...

  9. 【组队学习】【35期】SQL编程语言

    SQL编程语言 航路开辟者:王复振.杨煜.闫钟峰.杨梦迪.苏鹏 领航员:庞永生 航海士:王彦淳.木卷.丁一超 基本信息 开源内容:https://github.com/datawhalechina/w ...

最新文章

  1. 基于Idea从零搭建一个最简单的vue项目
  2. linux环境调用gsoap,Linux下gSOAP的使用 (c++)
  3. Dubbo 在maven项目中的应用
  4. 【effective c++读书笔记】【第7章】模板和泛型编程(3)
  5. influxdb查看数据库命令_influxdb基本命令
  6. 发展中国家如何炼成发达国家?
  7. SQL的四种连接-左外连接、右外连接、内连接、全连接
  8. 使用SAP Cloud Platform fullstack WebIDE创建SAP UI5应用并部署
  9. 大一计算机绩点3算什么水平,绩点只有3?我可以解释一下
  10. 从B站 (哔哩哔哩) 泄露的源码里发现了B站视频推荐的秘密
  11. python中英文古风排版_古风排版 - Calculus9 - 博客园
  12. 感知哈希算法实现以图搜图软件
  13. html为知笔记模板,为知笔记使用技巧:如何建立模板
  14. CVPR 2018值得一看的25篇论文,都在这里了 | 源码 解读
  15. One Billion Customers
  16. html5 css动画效果代码,超酷震撼 8个HTML5/CSS3动画应用及源码
  17. CTF学习记录 i春秋 《从0到1:CTFer成长之路》文件上传
  18. Candence PCB Si 仿真设计篇前导:IBIS模型与PKG介绍
  19. http访问接口post和get方法类
  20. 商超连锁行业异速联解决方案

热门文章

  1. 【Hinton大神新作】Dynamic Routing Between Capsules阅读笔记
  2. 百度“算盘”logo引领国风来袭
  3. OpenCV_basis
  4. (四十五:2021.08.05)《利用深度学习对ecg信号进行分割》
  5. DaVinci:HDR 调色
  6. 测试ipad屏幕软件叫什么,附:屏幕专业测试方法简介_苹果 The new iPad_液晶显示器评测-中关村在线...
  7. 游戏开发物语方案点数分配_游戏开发物语攻略 游戏开发物语新手须知技巧
  8. python爬虫需要哪些基础知识-【PYTHON】【爬虫】关于python爬虫的一些基础知识
  9. 实践中如何优化MySQL
  10. 3D建模软件功能解析之Maya篇