Go语言使用defer+recover解决panic导致程序崩溃的问题
作者:cui_yonghua 发布时间:2024-01-30 06:29:18
标签:Go,defer,recover,panic,程序崩溃
案例:如果我们起了一个协程,但这个协程出现了panic,但我们没有捕获这个协程,就会造成程序的崩溃,这时可以在goroutine中使用recover来捕获panic,进行处理,这样主线程不会受到影响。
代码如下:
package main
import (
"fmt"
"time"
)
func sayHello() {
for i := 0; i < 10; i++ {
time.Sleep(time.Second)
fmt.Println("hello world")
}
}
func test() {
//使用 defer + recover
defer func() {
//捕获test抛出的panic
if err := recover();err!=nil{
fmt.Println("test发生错误",err)
}
}()
//定义一个map
var myMap map[int]string
myMap[0] = "golang" //error
}
func main() {
go sayHello()
go test()
for i := 0; i < 10; i++ {
fmt.Println("main() ok=",i)
time.Sleep(time.Second)
}
}
执行结果如下图:
来源:https://cuiyonghua.blog.csdn.net/article/details/94739645


猜你喜欢
- 我在网上找到了一篇文章,简直堪称神器。刚开始用brew search mysql ...能找到,按照提示一步一步安装,结果到最后就是启动不起
- 如下所示:import numpy as npZ=np.random.random((5,5))Zmax,Zmin=Z.max(axis=0
- 添加用户(随着用户的创建,自动产生与用户同名的schema) CREATE USER "TESTER" PROFILE
- 1、官网下载地址在官网找到你想安装的版本 官网地址:https://www.python.org/并且选择下载windows版本目前最新的版
- 使用MySQL,安全问题不能不注意。以下是MySQL提示的23个注意事项:1.如果客户端和服务器端的连接需要跨越并通过不可信任的网络,那么就
- Mysql Cluster概述 MySql Cluster最显著的优点就是高可用性,高实时性,高冗余,扩展性强。&n
- asp替换函数如下:Function ReplaceNoIgnoreCase(str,replStr) &n
- 前言MySQL提供了众多功能强大、方便易用的函数。使用这些函数可以极大地提高用户对数据库的管理效率。MySQL中的函数包括数学函数、字符串函
- 前段时日微软(Microsoft)正式发布了.NET Core 2.0,在很多开发社区中反响不错。但还是有一些开发者发出了疑问,.NET C
- 有些页面并不能直接用requests获取到内容,会动态执行一些js代码生成内容。这个文章主要是对付那些特殊页面的,比如必须要进行js调用才能
- 要调用RPC接口,python提供了一个框架grpc,这是google开源的rpc相关文档:https://grpc.io/docs/tut
- 1.前言JavaWeb Struts2的 * 我们都能很熟悉,在请求交给Action处理之前,先在 * 中处理,处理完之后再交给Action
- 本文通过一个详细的例子,来阐述了在线编辑XML文档数据的方法。由于Netscape对XML的支持比较弱,因此,要实现跨平台的数据交换,数据的
- 概述Anaconda安装后,会在开始菜单中添加菜单项,但是这些菜单项中,没有Jupyter Lab快捷方式。在实现前应该明确两点:开始菜单是
- 开始这是去年的问题了,今天在整理邮件的时候才发现这个问题,感觉顶有意思的,特记录下来。在表RelationGraph中,有三个字段(ID,N
- 错误如图所示:图一 如果不能很好地执行登录触发器,那么将会导致登录失败。 例如,如果创建了这个触发器,那么就可以设计下面的代码来达到失败的目
- 大家好,今天跟大家分享一个用Python实现的学生学籍管理系统:该代码主体由五个函数组成:1.add_stu() 添加2.del_stu()
- CURLOPT_RETURNTRANSFER 选项:curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);如
- 本月第一天日期SELECT FirstDayOfCurrentMonth = dateadd(mm,datediff(mm,0,getdat
- Oracle数据安全面面观 作者:づ★sl战神 随着计算机的普及以及网络的发展,数据库已经不再仅仅是那些程序员所专有的话题。而Oracle数