当前位置: 首页 > news >正文

彩票网站开发 晓风青岛门户网站建设

彩票网站开发 晓风,青岛门户网站建设,李沧网站建设电话,网站后台 全局配置为什么需要实现自定义 recovery 中间件#xff1f; 在 Golang 的 Web 项目中#xff0c;自定义 recovery 中间件是一种常见的做法#xff0c;用于捕获并处理应用程序的运行时错误#xff0c;以避免整个应用程序崩溃并返回对应格式的响应数据。 很多三方 web 框架#xf…为什么需要实现自定义 recovery 中间件 在 Golang 的 Web 项目中自定义 recovery 中间件是一种常见的做法用于捕获并处理应用程序的运行时错误以避免整个应用程序崩溃并返回对应格式的响应数据。 很多三方 web 框架例如 gin、echo都提供了官方实现的 recovery 中间件但是官方实现的中间件并不一定能满足自己的需求。例如 gin 官方提供的 recovery 中间件发生 panic 后会将当前请求的标准状态码置为 500body 置为空。但是这样的返回数据与格式可能会和自己的项目要求不一致。例如项目发生 panic 后是要求标准状态码依然返回 200body 值为 {code:-1, data:nil,msg:xxx}这种场景下就需要实现自己的 recovery 中间件了。 如何实现自定义 recovery 中间件 如果使用 gin 框架的话就非常简单了因为 gin 提供了完善的中间件功能遵守 gin 的要求实现满足自己项目的功能就可以了简单示例代码如下 package mainimport (github.com/gin-gonic/ginlognet/httpruntime )func Recovery() gin.HandlerFunc {return func(c *gin.Context) {defer func() {if err : recover(); err ! nil {const size 64 10stack : make([]byte, size)stack stack[:runtime.Stack(stack, false)]log.Printf([GinPanic] %s\n, string(stack))c.JSON(http.StatusOK, struct {Code int json:codeData interface{} json:dataMsg string json:msg}{Code: -1,Data: nil,Msg: server panic,})c.Abort()}}()c.Next()} } 使用示例如下 package mainimport (github.com/gin-gonic/ginruntime )func main() {r : gin.New()r.Use(Recovery())r.GET(/test, func(c *gin.Context) {panic(Oops! Something went wrong.)})r.Run(:8080) } 运行起来后访问 /test 触发 panic 后返回了预期的结果如下 $ curl http://127.0.0.1:8080/test {code:-1,data:null,msg:server panic} 接下来再看一个基于原生包  net/http 的一个示例代码如下 package mainimport (fmtlognet/httpruntime/debug )// 自定义的recovery中间件 func recoveryMiddleware(next http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {defer func() {if err : recover(); err ! nil {// 打印错误信息log.Println([Recovery] Panic:, err)// 打印堆栈跟踪信息log.Printf([Recovery] Stack Trace:\n%s\n, debug.Stack())// 返回一个适当的错误响应给客户端fmt.Fprintf(w, {code:-1,data:null,msg:server panic})}}()// 继续处理下一个中间件或路由处理函数next.ServeHTTP(w, r)}) }// 示例的处理函数 func helloHandler(w http.ResponseWriter, r *http.Request) {panic(Oops! Something went wrong.) // 模拟一个错误w.Write([]byte(Hello, Recovery Middleware!)) }func main() {// 创建一个多路复用器mux : http.NewServeMux()// 注册中间件mux.Handle(/test, recoveryMiddleware(http.HandlerFunc(helloHandler)))// 创建服务器server : http.Server{Addr: :8080,Handler: mux,}// 启动服务器log.Println(Server is running on http://localhost:8080)log.Fatal(server.ListenAndServe()) } 小结 Web 应用程序在运行时遇到错误并抛出 panic 时自定义的 recovery 中间件将会捕获panic 并记录对应的错误和堆栈信息避免应用程序崩溃并向客户端发送适当的错误响应数据。对于文本的示例可以根据自己的实际需求进行调整和扩展来实现自定义的 recovery 中间件。
http://www.w-s-a.com/news/576430/

相关文章:

  • 网上做调查问卷的网站请人做网站域名和主机
  • 个人网站模板html5找公司网站建设
  • 找最新游戏做视频网站一个做网站的团队需要哪些人员
  • 威海市做网站的做网站很难吗
  • 广州房地产网站建设方案怎么免费申请网站
  • 免费生成网站软件下载影视公司名字取名
  • 网站公司提供程序免费的网页入口
  • jsp网站开发实例教学房产网站怎么做400电话
  • 网络营销方式及流程广州seo工作
  • 专业商城网站制作免费网页设计成品
  • 韩国优秀设计网站找做网站找那个平台做
  • 贵州省清镇市建设学校网站国家企业信用信息公示系统官网河北
  • 游戏界面设计网站网站建设问一问公司
  • 织梦网站模板如何安装教程视频国外哪些网站可以注册域名
  • 用群晖做网站网站中文名称注册
  • 做一个企业网站需要哪些技术app开发公司名字
  • 网站建设有技术的公司图片在线设计平台
  • 建公司网站的详细步骤关于进一步加强网站建设
  • 丰宁县有做网站的吗?维护一个网站一年多少钱
  • 杭州网站设计渠道wordpress购物主题
  • 山东政务网站建设文字logo免费设计在线生成
  • 韩雪个人网站唐山网络运营推广
  • 查建设工程业绩在哪个网站网站建设优化服务如何
  • 江苏省建设工程安全监督网站商洛网站制作
  • 海淀网站建设wzjs51网页设计页面配色分析
  • 网站的备案流程图垦利网站制作
  • 行业用品网站怎么建设外链买东西的网站都有哪些
  • 淘宝做促销的网站集团门户网站建设策划
  • 网站排行榜查询怎样把个人介绍放到百度
  • vps 网站上传河北省招投标信息网