Go组队学习 9.异常处理
异常处理
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.异常处理相关推荐
- 【Datawhale组队学习Pytorch】Task 完结篇
[项目简介] PyTorch是利用深度学习进行数据科学研究的重要工具,在灵活性.可读性和性能上都具备相当的优势,近年来已成为学术界实现深度学习算法最常用的框架.考虑到PyTorch的学习兼具理论储备和 ...
- Python基础组队学习
文章目录 Python基础组队学习 Task1变量.运算符与数据类型及位运算 练习题 Task2 条件语句,循环语句 练习题 task3异常处理 练习题 task4列表.元组和字符串 列表 练习题 列 ...
- 四月青少年编程组队学习(Python一级)Task02
电子学会 软件编程(Python)一级 组队学习 试题来源 青少年软件编程(Python)等级考试试卷(一级)[2020.06] 青少年软件编程(Python)等级考试试卷(一级)[2020.09] ...
- 四月青少年编程组队学习(Python一级)Task01
电子学会 软件编程(Python)一级 组队学习 试题来源 青少年软件编程(Python)等级考试试卷(一级)[2020.06] 青少年软件编程(Python)等级考试试卷(一级)[2020.09] ...
- 四月青少年编程组队学习(图形化四级)Task05
电子学会 软件编程(图形化)四级 组队学习 试题来源: 青少年软件编程(Scratch)等级考试试卷(四级)[2019.12] 青少年软件编程(Scratch)等级考试试卷(四级)[2020.06] ...
- 四月青少年编程组队学习(图形化四级)Task03
电子学会 软件编程(图形化)四级 组队学习 试题来源: 青少年软件编程(Scratch)等级考试试卷(四级)[2019.12] 青少年软件编程(Scratch)等级考试试卷(四级)[2020.06] ...
- 四月青少年编程组队学习(图形化四级)Task01
电子学会 软件编程(图形化)四级 组队学习 试题来源: 青少年软件编程(Scratch)等级考试试卷(四级)[2019.12] 青少年软件编程(Scratch)等级考试试卷(四级)[2020.06] ...
- 【组队学习】【35期】深入浅出Pytorch
深入浅出Pytorch 航路开辟者:李嘉骐.牛志康.刘洋.陈安东 领航员:朱松青 航海士:管柯琴.宋泽山.林旭升 基本信息 开源内容:https://github.com/datawhalechina ...
- 【组队学习】【35期】SQL编程语言
SQL编程语言 航路开辟者:王复振.杨煜.闫钟峰.杨梦迪.苏鹏 领航员:庞永生 航海士:王彦淳.木卷.丁一超 基本信息 开源内容:https://github.com/datawhalechina/w ...
最新文章
- 基于Idea从零搭建一个最简单的vue项目
- linux环境调用gsoap,Linux下gSOAP的使用 (c++)
- Dubbo 在maven项目中的应用
- 【effective c++读书笔记】【第7章】模板和泛型编程(3)
- influxdb查看数据库命令_influxdb基本命令
- 发展中国家如何炼成发达国家?
- SQL的四种连接-左外连接、右外连接、内连接、全连接
- 使用SAP Cloud Platform fullstack WebIDE创建SAP UI5应用并部署
- 大一计算机绩点3算什么水平,绩点只有3?我可以解释一下
- 从B站 (哔哩哔哩) 泄露的源码里发现了B站视频推荐的秘密
- python中英文古风排版_古风排版 - Calculus9 - 博客园
- 感知哈希算法实现以图搜图软件
- html为知笔记模板,为知笔记使用技巧:如何建立模板
- CVPR 2018值得一看的25篇论文,都在这里了 | 源码 解读
- One Billion Customers
- html5 css动画效果代码,超酷震撼 8个HTML5/CSS3动画应用及源码
- CTF学习记录 i春秋 《从0到1:CTFer成长之路》文件上传
- Candence PCB Si 仿真设计篇前导:IBIS模型与PKG介绍
- http访问接口post和get方法类
- 商超连锁行业异速联解决方案
热门文章
- 【Hinton大神新作】Dynamic Routing Between Capsules阅读笔记
- 百度“算盘”logo引领国风来袭
- OpenCV_basis
- (四十五:2021.08.05)《利用深度学习对ecg信号进行分割》
- DaVinci:HDR 调色
- 测试ipad屏幕软件叫什么,附:屏幕专业测试方法简介_苹果 The new iPad_液晶显示器评测-中关村在线...
- 游戏开发物语方案点数分配_游戏开发物语攻略 游戏开发物语新手须知技巧
- python爬虫需要哪些基础知识-【PYTHON】【爬虫】关于python爬虫的一些基础知识
- 实践中如何优化MySQL
- 3D建模软件功能解析之Maya篇