在go中,虽然协程很好用,但是需要注意捕获他的异常,不如在生产环境中,子协程panic了,你的整个服务都会挂掉
错误示例
package main import ( "fmt" "time" ) func main() { defer func() { r := recover() fmt.Println("recover r:",r) }() // 启动一个协程 go func() { panic("start panic") }() // block 一下主协程 time.Sleep(1 * time.Second) fmt.Println("done") }
正确用法
package main import ( "fmt" "time" ) func main() { defer func() { r := recover() fmt.Println("recover r:", r) }() // 启动一个协程 go func() { defer func() { r := recover() fmt.Println("recover goroutine r:", r) }() panic("start panic") }() // block 一下主协程 time.Sleep(1 * time.Second) fmt.Println("done") }
原创文章,作者:站长,如若转载,请注明出处:https://wsppx.cn/1839/%e7%bd%91%e7%bb%9c%e5%bc%80%e5%8f%91/

相关推荐
-
golang sync.waitgroup的一个错误用法
close位置问题 错误用法 正确用法 close()得在wait前面 控制每秒并发多个 添加 time.Sleep(time.Second)
-
python后端开发面试-线程、进程、协程
简介 理解并发和并行 并行对应的是多进程 并发对应的是协程、线程(异步编程) 协程 协程之在python2中的yield使用 在python2中由于没有原生的协程,只有基于生成器的…
-
面试万科物业-高级Python
一共四轮面试,一面基础面试,体验还行,比较轻松,二面(深度技术面试)和三面(项目稳定性)跑过去既然电话面试?我在家不能电话面试吗?来回3个小时,我真的。。 四面是Hr总监面试,视频…
-
记录一次go mod tidy/go get安装私库错误信息
执行语句 go get -u codeup.aliyun.com/xxxx/commonlib 错误信息如下 解决方式 问题原因是没有权限访问这个,如果是阿里云的codeup平台,…
-
http/https协议面试题
如何你的简历上写了熟悉http协议的,那就要准备这个面试了 http是长连接吗? 在http1.0的时候是短连接,每次与服务端通信都需要建立新的连接,也就是三次握手 在http1….
-
python后端开发面试-装饰器
装饰器在python中是经常用到的,装饰器顾名思义是装饰的作用,其实就是一个函数把另外一个函数当作参数而已 函数装饰器 无参数装饰器 需要注意的是 @cost_time # 装饰没…
-
前端面试题整理(持续收集,后期补充答案)
HTTP协议相关 HTTP建立连接之tcp三次握手 HTTP断开连接之tcp四次挥手 缓存:强缓存与协商缓存 网络七层协议 浏览器输入一个网址,到页面展示这中间经历了什么? HTT…
-
docker教程系列之docker怎么构建镜像
在前面一章我们讲到了如何使用docker,这一章将会讲到如何把我们的项目打包成docker镜像,这种需求在我们的工作中很非常常见的,下面将会分别讲到dockerfile文件构成,后…