From 665fde660952e8bdb7effbf3713ac066bccd83a6 Mon Sep 17 00:00:00 2001 From: yumaojun03 <719118794@qq.com> Date: Sun, 11 May 2025 17:54:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85Gin=20Revoery=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E5=A4=84=E7=90=86=E5=9C=BA=E6=99=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- book/v3/exception/README.md | 14 ++++++++++++++ book/v3/exception/gin_recovery.go | 17 +++++++++++++++++ book/v3/main.go | 4 +++- skills/gin/main.go | 2 +- 4 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 book/v3/exception/gin_recovery.go diff --git a/book/v3/exception/README.md b/book/v3/exception/README.md index c66ccb0..e74abc6 100644 --- a/book/v3/exception/README.md +++ b/book/v3/exception/README.md @@ -86,3 +86,17 @@ if exception.IsApiException(err, exception.CODE_NOT_FOUND) { // 异常处理逻辑 } ``` + +## Gin Revovery 结合 + +```go +// Recovery returns a middleware that recovers from any panics and writes a 500 if there was one. +// 自定义异常处理机制 +func Recovery() gin.HandlerFunc { + return gin.CustomRecovery(func(c *gin.Context, err any) { + // 非业务异常 + c.JSON(500, NewApiException(500, fmt.Sprintf("%#v", err))) + c.Abort() + }) +} +``` diff --git a/book/v3/exception/gin_recovery.go b/book/v3/exception/gin_recovery.go new file mode 100644 index 0000000..7205b40 --- /dev/null +++ b/book/v3/exception/gin_recovery.go @@ -0,0 +1,17 @@ +package exception + +import ( + "fmt" + + "github.com/gin-gonic/gin" +) + +// Recovery returns a middleware that recovers from any panics and writes a 500 if there was one. +// 自定义异常处理机制 +func Recovery() gin.HandlerFunc { + return gin.CustomRecovery(func(c *gin.Context, err any) { + // 非业务异常 + c.JSON(500, NewApiException(500, fmt.Sprintf("%#v", err))) + c.Abort() + }) +} diff --git a/book/v3/main.go b/book/v3/main.go index b863f4b..e6e7fa7 100644 --- a/book/v3/main.go +++ b/book/v3/main.go @@ -5,6 +5,7 @@ import ( "os" "122.51.31.227/go-course/go18/book/v3/config" + "122.51.31.227/go-course/go18/book/v3/exception" "122.51.31.227/go-course/go18/book/v3/handlers" "github.com/gin-gonic/gin" ) @@ -17,7 +18,8 @@ func main() { } config.LoadConfigFromYaml(path) - server := gin.Default() + server := gin.New() + server.Use(gin.Logger(), exception.Recovery()) handlers.Book.Registry(server) diff --git a/skills/gin/main.go b/skills/gin/main.go index c9f8bfb..01f6024 100644 --- a/skills/gin/main.go +++ b/skills/gin/main.go @@ -8,7 +8,7 @@ import ( ) func main() { - server := gin.Default() + server := gin.New() server.GET("/hello", func(ctx *gin.Context) { ctx.String(200, "Gin Hello World!")