在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/
![微信扫一扫](https://wsppx.cn/wp-content/uploads/2021/06/WechatIMG90.jpeg)
相关推荐
-
python后端开发面试-线程、进程、协程
简介 理解并发和并行 并行对应的是多进程 并发对应的是协程、线程(异步编程) 协程 协程之在python2中的yield使用 在python2中由于没有原生的协程,只有基于生成器的…
-
重学Python基础篇(一)之认识python
前言 在我刚毕业的时候Python语言就非常火了,随之而来的就是招人单位,python岗位的激增,但同时增加的还有培训单位,这也造成了市场的饱和。就我个人而已,python web…
-
docker教程系列之docker怎么构建镜像
在前面一章我们讲到了如何使用docker,这一章将会讲到如何把我们的项目打包成docker镜像,这种需求在我们的工作中很非常常见的,下面将会分别讲到dockerfile文件构成,后…
-
http/https协议面试题
如何你的简历上写了熟悉http协议的,那就要准备这个面试了 http是长连接吗? 在http1.0的时候是短连接,每次与服务端通信都需要建立新的连接,也就是三次握手 在http1….
-
golang同目录调用其他文件函数的用法
问题复现 解决方法 这个应该是新手常见的问题,golang的包管理方式,这个运行错误是由于你执行了main.go,而没有编译其他go文件,当然不知道run函数哪里来的 正确方式 g…
-
微服务:搭建consul注册中心
macos安装 linux amd系统安装 单节点运行 运行多个节点 service 节点 node节点 运行 管理页面 http://192.168.232.130:8500/u…
-
前端学习记录之一:函数式编程
本节回顾 1.函数式编程(核心思想:把运算过程抽象成函数) 2.函数相关复习(函数是一等公民,高级函数,闭包) 3.函数式编程基础(lodash,纯函数,柯里化,管道,函数组合) …
-
golang sync.waitgroup的一个错误用法
close位置问题 错误用法 正确用法 close()得在wait前面 控制每秒并发多个 添加 time.Sleep(time.Second)
-
前端面试题整理(持续收集,后期补充答案)
HTTP协议相关 HTTP建立连接之tcp三次握手 HTTP断开连接之tcp四次挥手 缓存:强缓存与协商缓存 网络七层协议 浏览器输入一个网址,到页面展示这中间经历了什么? HTT…