Golang之路---02 基础语法——异常机制:panic 和 recover

news/2024/11/19 6:28:43/

Golang的异常处理

Go 没有像 Java 和 .NET 那样的 try/catch 异常机制:不能执行抛异常操作。
在 Golang 中,有不少常规错误,在编译阶段就能提前告警,比如语法错误或类型错误等,但是有些错误仅能在程序运行后才能发生,比如数组访问越界、空指针引用等,这些运行时错误会引起程序退出。
当然能触发程序宕机退出的,也可以是我们自己,比如经过检查判断,当前环境无法达到我们程序进行的预期条件时(比如一个服务指定监听端口被其他程序占用),可以手动触发 panic,让程序退出停止运行。

panic:抛出异常,使程序崩溃
recove:捕获异常,恢复程序或做收尾工作

触发panic

手动触发宕机,是非常简单的一件事,只需要调用 panic 这个内置函数即可

func main(){panic("异常捕获")
}

在这里插入图片描述

捕获 panic

发生了异常,有时候就得捕获,就像 Python 中的except 一样,那 Golang 中是如何做到的呢?
这就不得不引出另外一个内建函数 – recover,它可以让程序在发生宕机后起生回生。
但是 recover 的使用,有一个条件,就是它必须在 defer 函数中才能生效,其他作用域下,它是不工作的。

package mainimport "fmt"func set(x int) {defer func() {//recover()可以将捕获到的panic信息打印if err := recover(); err != nil {fmt.Println(err)}}()//故意制造数组越界,触发panicvar arr [10]intarr[x] = 100
}func main() {set(20)//能执行到此句,说明panic被捕获了//后续的程序能继续执行fmt.Println("panic已被捕获")
}

在这里插入图片描述


http://www.ppmy.cn/news/1000042.html

相关文章

vue中axios的使用

什么是Axios Axios是一个基于Promise的HTTP客户端库,用于发送HTTP请求并处理响应。它可以在浏览器和Node.js环境中使用,并提供了许多功能,如拦截请求和响应、转换请求和响应数据、取消请求等。 使用场景: 发送AJAX请求&#xf…

【JS】运算符优先级汇总

文章目录 如果 OP1 和 OP2 具有不同的优先级(见下表),则优先级最高的运算符先执行,不用考虑结合性。 console.log(3 10 * 2); // 输出 23 console.log((3 10) * 2); // 输出 26 因为括号改变了优先级如果 OP1 和 OP2 具有相同的…

Tomcat安装与管理

文章目录 Tomcat安装及管理Tomcat gz包安装:JDK安装:Tomcat安装:修改配置文件(如下):服务启动配置: Tomcat-管理(部署jpress):修改允许访问的主机修改允许管理APP的主机进入管理&…

【C++】类和对象-继承

0.前言 1.基本语法 继承的用处就是极大的减少代码的重复性&#xff0c;如果没有用继承&#xff0c;看看以下代码&#xff0c;你知道了。。。。 基本实现代码&#xff1a; #include <iostream> using namespace std; /******************************************/void …

数据库同步时,通过存储过程找出时间内发生变化的视图和物化视图

1. 应用场景 在软件开发或数据库运维过程&#xff0c;每一次数据库同步都是运维人员的痛苦的过程。 如果每次都是无脑全量更新&#xff0c;则工作量较大如果每次都是增量更新&#xff0c;则需要知道哪些视图谁在什么时候修改了&#xff0c;增加了什么信息&#xff08;因为往往…

【python学习笔记】extend() 方法和append()方法

当使用 extend() 方法时&#xff0c;可以将一个可迭代对象中的元素添加到列表中&#xff0c;而不是将整个可迭代对象作为单个元素添加到列表中。这样可以实现列表的扩展&#xff0c;而不是简单地将另一个可迭代对象作为单个元素添加到列表中。 # 使用 extend() 方法前 fruits …

2023最新AI艺术二维码制作软件教程【软件工具+教程】下载

2023最新AI艺术二维码傻瓜式生成教程&#xff0c;不需要市面上繁琐的安装步骤和显卡的配置要求&#xff01;我看了一眼市面上的要么只有视频教程&#xff0c;无工具纯纯牛马用来扯淡了。 要么就是安装繁琐&#xff0c;配置要求还高&#xff01; 这期教程教大家怎么傻瓜式制作…

第六章:SpringMVC上

第六章&#xff1a;SpringMVC上 6.1&#xff1a;SpringMVC简介 什么是MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分。 M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据。 一类称为实体类Bean&…