在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/
赞 (0)
打赏
微信扫一扫

grpc请求超时处理
« 上一篇
2021年9月27日 pm12:31
ESXI系列之直通硬盘给黑群晖系统
下一篇 »
2021年10月4日 pm8:54
相关推荐
-
前端面试题:Http code 301和 302区别
总结:301是永久跳转并且有缓存,而302是临时跳转,没有缓存。 使用场景:当迁移域名当时候,网站域名是永久性转移,这时可以用301; 而当只是在服务器内部跳转,比如访问服务器a….
-
docker教程系列之docker怎么用
前面一章介绍了docker是什么,相信大家应该对docker有个初步对认识,docker的出现就是方便大家更加方便快捷的部署、迁移服务,也更好的隔离服务环境。既然大家都知道了doc…
-
Mysql 面试题复习
什么是索引 索引是一种数据结构,目的是加速查询速度,mysql innodb的索引默认是B+树,索引类型有普通索引、主键索引、唯一索引、前缀索引 有哪些存储引擎 innodb是事务…
-
grpc请求超时处理
错误描述 grpc默认超时时间是1s,有些框架是500ms,当超时了会报如下错误: 客户端 client连接 controller 服务端增加超时 controller
-
Docker安装Jenkins
简介 在开发过程中,devops搭建,ci集成工具选择Jenkins是不二之选 安装 安装docker centos7 创建jenkins目录 运行docker 如果用做cicd,…
-
python后端开发面试-redis缓存
默认16个数据库 五中数据结构 string list(列表) set(集合) zset(有序列表) hash(字典) 理解穿透、击穿、雪崩及其处理方法 redis怎样实现分布式锁…