go fiber:发生内部错误时统一返回json格式

一,文档地址:

https://learnku.com/docs/gofiber/2.x/error-handling/11732

二,当出错时,使进程不退出

1,现象

go代码:

func (dc *UserController) GetUser(c *fiber.Ctx) error {
	var z int = 0
	var i int = 100 / z
	fmt.Println("i:%i",i)
	// 处理获取用户的逻辑
	return c.SendString("获取用户信息")
}

进程会发生crash

panic: runtime error: integer divide by zero

goroutine 18 [running]:

2,如何使进程不退出?

代码:main.go

package main

import (
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/middleware/recover"
	"industry/routes"
)

func main() {

	app := fiber.New()

	app.Use(recover.New())
	// 设置路由
	routes.SetupRoutes(app)

	// 启动服务器
	err := app.Listen(":3000")
	if err != nil {
		return
	}
}

效果:

三,配置json格式返回错误:

package main

import (
	"github.com/gofiber/fiber/v2"
	"github.com/gofiber/fiber/v2/middleware/recover"
	"industry/config"
	"industry/routes"
)

func main() {

	//app := fiber.New()

	app := fiber.New(fiber.Config{
		ErrorHandler: func(c *fiber.Ctx, err error) error {
			// 状态代码默认为500
			code := fiber.StatusInternalServerError

			// 如果是fiber.*Error,则检索自定义状态代码。
			if e, ok := err.(*fiber.Error); ok {
				code = e.Code
			}

			// 发送自定义错误页面
			return c.Status(code).JSON(config.Error("内部错误:"+err.Error()))
		},
	})

	app.Use(recover.New())
	// 设置路由
	routes.SetupRoutes(app)

	// 启动服务器
	err := app.Listen(":3000")
	if err != nil {
		return
	}
}

四,测试效果 :

posted @ 2024-11-16 12:39  刘宏缔的架构森林  阅读(26)  评论(0编辑  收藏  举报