Golang入门学习(五):异常处理

2.5 错误处理机制
2.5.1 基本说明
- Go语言追求简洁优雅,因此并不支持传统的try…catch…finally这种处理方式
- Go中引入的处理方式包括: defer, panic, recover
- 使用场景如下: 在Go程序中跑出一个异常panic, 然后在defer中通过recover捕获到这个异常然后处理之
- 加入异常处理机制,即使程序发生错误,主程序依然可以继续运行
2.5.2 入门示例
func test() {
num1 := 10
num2 := 0
ret := num1 / num2 //panic: runtime error: integer divide by zero
fmt.Println(ret)
}
func testPanic() {
//使用defer+recover机制来处理异常
defer func() {
err := recover() //recover函数用于捕获异常
if err != nil { //说明真的有异常发生
fmt.Println("err=", err)
}
}() //匿名函数
num1 := 10
num2 := 0
ret := num1 / num2 //panic: runtime error: integer divide by zero
fmt.Println(ret)
}
func main() {
testPanic()
fmt.Println("testPanic()执行完毕~~~")
}
2.5.3 自定义错误
- Go程序中支持自定义错误,使用errors.New和panic内置函数
- errors.New(“xxx”) 用来生成一个自定义错误,返回值是一个错误码
- panic内置函数用来接收一个interface{}类型的值作为参数,因此可以接受自定义的错误类型。提示错误信息并退出程序
//自定义错误类型
func readConf(name string) (err error) {
if name != "ipsec.conf" {
return errors.New("输入的文件名称有误!")
}
return nil
}
func test2() {
if err := readConf("ipsecX.conf"); err != nil {
panic(err)
}
fmt.Println("后续代码继续执行~~~")
}
func main() {
test2()
}
Golang入门学习(五):异常处理的更多相关文章
- SCARA——OpenGL入门学习五六(三维变换、动画)
OpenGL入门学习(五) 此课为三维变换的内容,比较枯燥.主要是因为很多函数在单独使用时都不好描述其效果, 在前面绘制几何图形的时候,大家是否觉得我们绘图的范围太狭隘了呢?坐标只能从-1到1,还只能 ...
- C语言程序设计入门学习五步曲(转发)
笔者在从事教学的过程中,听到同学抱怨最多的一句话是:老师,上课我也能听懂,书上的例题也能看明白,可是到自己动手做编程时,却不知道如何下手.发生这种现象的原因有三个: 一.所谓的看懂听明白,只是很肤浅的 ...
- Golang入门学习(三):函数
文章目录 2.3 函数 2.3.1 基本语法 2.3.2 入门demo: 2.3.3 函数递归: 2.3.4 函数注意事项 2.3.5 init函数 2.3.6 匿名函数 2.3.7 闭包 2.3.8 ...
- Golang入门学习(二):控制分支
文章目录 @[TOC] 1. 控制分支 1.1 if-else分支 1.2 switch分支 1.4 while 和do...while循环结构 1.5 多种循环结构 1.6 break 1.7 co ...
- Objective C 快速入门学习五
<一>继承和多态 @class Complex 声明类(同C++) 子类函数成员 super 访问父类 同C++类似 .通过继承 在子类中添加新方法 .通过继承 在子类中添加新成员 .通过 ...
- 微服务(入门学习五):identityServer4+ocelot+consul实现简单客户端模式
简介 主要是采用identity Server4 和ocelot 加上consul 实现简单的客户端模式 开发准备 环境准备 下载并安装Consul具体请参考前几篇的内容 项目介绍 创建ocelot ...
- Golang入门学习(四):常用的函数汇总
文章目录 2.4 常用的内置函数 2.4.1 字符串常用内置函数 2.4.2 常用的时间和日期相关函数 2.4.3 内置函数 2.4 常用的内置函数 2.4.1 字符串常用内置函数 https://g ...
- JavaScript入门学习笔记(异常处理)
try:语句测试代码块的错误,当try中的代码块出错时执行catch中的代码块. catch:语句处理错误: throw:语句创建或抛出自定义异常. 三者一起使用可以控制程序流并生成自定义异常信息. ...
- dubbo入门学习 五 provider端的编写
1. 新建Maven Project, 里面只有接口(dubbo-service) 1.1 为什么这么做? RPC框架,不希望Consumer知道具体实现.如果实现类和接口在同一个项目中,Consum ...
随机推荐
- 【GCC编译器】计算支配树信息 Part1 - 求CFG的深度为主搜索树
深度为主生成树:将图中所有的结点和那些构成深度为主次序的边表示为树的形式,并将其他的边(这些边不是深度为主次序的一部分)用一种有别于树的方式来表示(我们用虚线而不是实线表示它们) 属于深度为主生成树的 ...
- 造轮子系列之RPC 1:如何从零开始开发RPC框架
前言 RPC 框架是后端攻城狮永远都绕不开的知识点,目前业界比较知名有 Dubbo.Spring Cloud 等.很多人都停留在了只会用的阶段,作为程序猿,拥有好奇心深入学习,才能有效提高自己的竞争力 ...
- 2020年度钻石C++C学习笔记(2)--《博学谷》
2020年度钻石C++C--<博学谷> 1.以下标示符中命名合法的是A A.__A__ B.ab.c C.@rp D.2Y_ 2.设 a 和 b 均为 double 型变量,且a=5.5. ...
- 虚拟基站(VRS)
虚拟参考站技术(Virtual Reference Station,简称VRS)也称虚拟基准站技术,是一种网络实时动态测量实时动态测量(RTK)技术,通过在某一区域内建立构成网状覆盖的多个GPS基 ...
- 只要套路对,薪资直接翻一倍!保姆级Android面试葵花宝典,肝完面试犹如开挂
跳槽,这在 IT 互联网圈是非常普遍的,也是让自己升职加薪,走上人生巅峰的重要方式.那么作为一个普通的Android程序猿,我们如何才能斩获大厂offer 呢? 疫情向好.面试在即,还在迷茫踌躇中的后 ...
- (纯js)如何不刷新网页就能链接新的js文件
如何不刷新网页就能链接新的js文件,其实在HTML语言中已经有相关的函数了,就是再添加一个<script src=.....></script>. 函数叫document.bo ...
- druid与知乎平台
背景 知乎作为知名中文知识内容平台,业务增长和产品迭代速度很快,如何满足业务快速扩张中的灵活分析需求,是知乎数据平台组要面临的一大挑战. 知乎数据平台团队基于开源的 Druid 打造的业务自助式的数据 ...
- spring cloud 知识总结
### 单体应用存在的问题 - 随着业务的发展,开发变得越来越复杂.- 修改.新增某个功能,需要对整个系统进行测试.重新部署.- 一个模块出现问题,很可能导致整个系统崩溃.- 多个开发团队同时对数据进 ...
- Walkthrough: Create and use your own Dynamic Link Library (C++)
参考网站:https://docs.microsoft.com/en-us/cpp/build/walkthrough-creating-and-using-a-dynamic-link-librar ...
- Linux 系统下10个查看网络与监听的命令
下面列出来的10个基础的每个linux用户都应该知道的网络和监控命令.网络和监控命令类似于这些: hostname, ping, ifconfig, iwconfig, netstat, nslook ...