在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)
相关推荐
-
golang net http一个低级错误
错误信息 原因 在go中http/net不像python的requests,封装的没有那么全,默认没有加body类型。 解决方式 request.Header.Set(“…
-
Python通过mac地址唤醒电脑
需求 家中nas需要定时唤醒 远程在外唤醒家中的电脑 直接上代码 说明 mac地址可以在自己的路由器中获取 网络唤醒,需要被唤醒的机器主板支持网络唤醒,记得在bios设置 通过外网…
-
golang基础面试题
自己除了找python相关的岗位,还想找一下go的岗位,有转语言的倾向。但我自由半年的项目经验。 谈谈对defer的认识 defer用于资源的释放,会在函数返回之前进行调用,它会经…
-
grpc请求超时处理
错误描述 grpc默认超时时间是1s,有些框架是500ms,当超时了会报如下错误: 客户端 client连接 controller 服务端增加超时 controller
-
docker教程系列之docker是什么
简介 Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructu…
-
python2使用virtualenv报错 ImportError: No module named importlib_metadata
环境 centos python2.7.15 复现 解决方法 pip install –upgrade setuptools 这类错误 升级pip
-
Leecode – 反转单链表
原题 输入[1,2,3,4,5] 输出[5,4,3,2,1] https://leetcode-cn.com/problems/reverse-linked-list/ 解答 思路…
-
前端学习记录之一:函数式编程
本节回顾 1.函数式编程(核心思想:把运算过程抽象成函数) 2.函数相关复习(函数是一等公民,高级函数,闭包) 3.函数式编程基础(lodash,纯函数,柯里化,管道,函数组合) …
-
面试万科物业-高级Python
一共四轮面试,一面基础面试,体验还行,比较轻松,二面(深度技术面试)和三面(项目稳定性)跑过去既然电话面试?我在家不能电话面试吗?来回3个小时,我真的。。 四面是Hr总监面试,视频…
-
Docker安装Jenkins
简介 在开发过程中,devops搭建,ci集成工具选择Jenkins是不二之选 安装 安装docker centos7 创建jenkins目录 运行docker 如果用做cicd,…