您的位置 首页 golang

Golang Recover提高程序的健壮性


GO语言中goroutine的开启是很方便的只需要一个关键词go func() 就可以开启一个协程。但是在协程中我们可能会遇到一些致命的错误,如果这个时候我们没有对这个错误进行处理,那么整个程序就会崩溃。而在Go中为解决这个问题提供了一个recover函数来处理。

不使用recover

先来看一个不使用recover的示例

var wait sync.WaitGroupfunc main() {    wait.Add(2)     go Worker(0)     go Worker(1)    wait.Wait()}func Worker(number int)  {    defer func() {        wait.Done()    }()    if number ==0  {        panic("work error")    }    fmt.Printf("number is %d\r\n",number)}

这个时候我们如果执行程序就会得到一个致命的错误,从而导致程序崩溃。所以这种方式是不取的

panic: work errorgoroutine 6 [running]:main.Worker(0x0)    D:/golang/test/main.go:25 +0x139created by main.main    D:/golang/test/main.go:12 +0x62

使用recover

下面对上面的程序进行改写,增加recoer的使用

var wait sync.WaitGroupfunc main() {    wait.Add(2)     go Worker(0)     go Worker(1)    wait.Wait()}func Worker(number int)  {    defer func() {        if err := recover() ; err != nil{            fmt.Printf("number is %d and some get wrong\r\n",number)        }        wait.Done()    }()    if number ==0  {        panic("work error")    }    fmt.Printf("number is %d\r\n",number)}

这个时候我们就会得到一个错误的提示,而不是直接得到一个致命的错误.

number is 1number is 0 and some get wrong

所以我们在使用go协程的时候应该尽量都对panic进行recover操作,防止整个程序的崩溃

期待与您一起交流

白色底可爱幼稚微信公众号底部二维码.png


文章来源:智云一二三科技

文章标题:Golang Recover提高程序的健壮性

文章地址:https://www.zhihuclub.com/6721.shtml

关于作者: 智云科技

热门文章

网站地图