go fiber:發生內部錯誤時統一返回json格式

刘宏缔的架构森林發表於2024-11-16

一,文件地址:

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
	}
}

效果:

go fiber:發生內部錯誤時統一返回json格式

三,配置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
	}
}

四,測試效果 :

go fiber:發生內部錯誤時統一返回json格式

相關文章