首页 > 其他分享 >gin recovery 与 goroutine recover

gin recovery 与 goroutine recover

时间:2022-10-17 11:57:14浏览次数:80  
标签:函数 goroutine 中间件 gin recover panic

Gin Recovery

Recovery返回一个中间件,该中间件从任何恐慌中恢复,并写入500(如果有)。当你的程序出现一些你未考虑到的异常时,程序就会退出,服务就停止了,所以这个中间件是有必要的。

gin.Default()返回一个已连接记录器和恢复中间件的引擎实例,即Logger 和 Recovery 中间件,我们在这里可以看到gin.Default本质上就是调用了gin.New,然后再Use Logger 和 Recovery这两个中间件

goroutine recover

goroutine中使用recover,解决协程中出现panic,导致程序崩溃的问题。recover panic 协程的错误处理

package main
 
import (
    "fmt"
    "time"
)
 
//goroutine中使用recover,解决协程中出现panic,导致程序崩溃的问题。
func sayhello() {
    for i := 0; i < 10; i++ {
        time.Sleep(time.Second)
        fmt.Println("say hello")
    }
}
 
func test() {
    //这里可以使用错误处理机制defer + recover来解决
    defer func() {
        //使用匿名函数捕获test抛出的panic
        //是一个内建的函数,可以让进入令人恐慌的流程中的 goroutine 恢复过来。
        // recover仅在延迟函数中有效。
        //在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果。
        //如果当前的 goroutine 陷入恐慌,调用 recover 可以捕获到 panic 的输入值,
        //并且恢复正常的执行。recover只有在defer调⽤的函数中有效。
 
        if err := recover(); err != nil {
            fmt.Println("test 发生错误", err)
        }
    }()
    //定义了一个map
    var myMap map[int]string
    myMap[0] = "golang" //error
    //panic: assignment to entry in nil map
}
func main() {
    go sayhello()
    go test()
    for i := 0; i < 10; i++ {
        fmt.Println("ok")
        time.Sleep(time.Second)
    }
}

recover函数的作用:

使用匿名函数捕获test抛出的panic
是一个内建的函数,可以让进入令人恐慌的流程中的 goroutine 恢复过来。
recover仅在延迟函数中有效。
在正常的执行过程中,调用 recover 会返回 nil 并且没有其他任何效果。
如果当前的 goroutine 陷入恐慌,调用 recover 可以捕获到 panic 的输入值,
并且恢复正常的执行。recover只有在defer调⽤的函数中有效。

标签:函数,goroutine,中间件,gin,recover,panic
From: https://www.cnblogs.com/peteremperor/p/16798676.html

相关文章

  • html-webpack-plugin默认配置的获取与修改
    官方文档https://cli.vuejs.org/zh/guide/webpack.html#简单的配置方式获取默认配置配置vue.config.js在项目根目录下创建vue.config.js文件,键入如下代码:constHtmlWebp......
  • nginx配置文件rewrite和if
    nginx配置文件rewrite和ifrewrite语法:rewriteregexreplacementflag;,如:rewrite^/images/(.*\.jpg)$/imgs/$1break;此处的$1用于引用(.*.jpg)匹配到的内容,又如:re......
  • nginx入门到实战
    第一节、安装升级1.1、linux初始化1、关闭防火墙systemctlstopfirewalldsystemctldisablefirewalld2、关闭selinuxvim/etc/selinux/configSELINUX=disabled......
  • DEMO: MIRO 根据物料创建贷项凭证BAPI_INCOMINGINVOICE_CREATE
    QQ群:SAP干货铺, 群号:775662808所有群管理严格,严格禁止一切外来链接、招聘、广告等垃圾信息!MIRODemo*&---------------------------------------------------------------......
  • DEMO: MIRO 根据退货PO创建贷项凭证BAPI_INCOMINGINVOICE_CREATE
    QQ群:SAP干货铺, 群号:775662808所有群管理严格,严格禁止一切外来链接、招聘、广告等垃圾信息!POMIRO或者不勾选计算税额,手动输入税额。demo*&-----------------------------......
  • nginx配置文件rewrite和if
    nginx配置文件rewrite和ifrewrite语法:rewriteregexreplacementflag;,如:rewrite^/images/(.*\.jpg)$/imgs/$1break;此处的$1用于引用(.*.jpg)匹配到的内容,又如:re......
  • 路由和Nginx
    history路由前端router实现history路由刷新页面流程一个新的请求发起后-->后端路由->后端路由规则返回内容-->浏览器加载页面内容-->前端路由处理渲染->按前......
  • 【第四篇】Camunda系列-ProcessEngine核心对象
    一、ProcessEngine  ProcessEngine是Camunda流程引擎的核心。我们在流程中的很多具体的处理比如​​流程部署​​​、​​流程部署​​​、​​流程审批​​​等操作都是......
  • AtCoder Beginner Contest 273 题解
    第一次AtCoder体验,不是很好。ARecursiveFunction原题链接大水题。只要会递归就会做。点击查看代码#include<cstdio>#include<iostream>#definelllonglong......
  • docker nginx 容器(temp)
    一、安装docker二、下载nginx容器命令:dockerpullnginx 三、启动容器dockerrun-p8000:80-dnginxs 四、编写index.html页面viindex.html写入hellow......