在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/

相关推荐
-
docker教程系列之docker是什么
简介 Docker 是一个开放源代码软件,是一个开放平台,用于开发应用、交付(shipping)应用、运行应用。 Docker允许用户将基础设施(Infrastructu…
-
grpc请求超时处理
错误描述 grpc默认超时时间是1s,有些框架是500ms,当超时了会报如下错误: 客户端 client连接 controller 服务端增加超时 controller
-
kubeadm安装单节点master
环境 centos7.6 三台虚拟机,一个master,2个node 192.168.0.11 master 192.168.0.12 node 192.168.0.13 node…
-
前端学习记录之一:函数式编程
本节回顾 1.函数式编程(核心思想:把运算过程抽象成函数) 2.函数相关复习(函数是一等公民,高级函数,闭包) 3.函数式编程基础(lodash,纯函数,柯里化,管道,函数组合) …
-
http/https协议面试题
如何你的简历上写了熟悉http协议的,那就要准备这个面试了 http是长连接吗? 在http1.0的时候是短连接,每次与服务端通信都需要建立新的连接,也就是三次握手 在http1….
-
记录一次引用其他微服务的proto文件,修改了message 中的字段的问题
背景 有2个微服务A和B,在A微服务中引用了B的proto,也就是请求A服务,A服务调用B服务的内容,并且修改了其中一个message中的字段,修改的proto文件message的…
-
go微服务一个错误:rpc error: code = Unimplemented desc = unknown service xxx
前言:当你的微服务需要连接其他的人的微服务,他会给你提供一个proto文件,当你调用他们的方法的时候,一直报错误:,一开始以为是服务地址写错了。后面查了一下,是go 语言中,pro…
-
golang net http一个低级错误
错误信息 原因 在go中http/net不像python的requests,封装的没有那么全,默认没有加body类型。 解决方式 request.Header.Set(“…
-
微服务:搭建consul注册中心
macos安装 linux amd系统安装 单节点运行 运行多个节点 service 节点 node节点 运行 管理页面 http://192.168.232.130:8500/u…
-
面试xx资本(私募基金)Python高级工程师
面试的问题都比较常见,我没有准备好。下面的题目答案仅供参考。今天二面过了,给了offer。 面试体验一般,hr不够热情,相比大点的公司来讲,没有提前通知面试,面试官上来就直接问问题…