一,文件地址:
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
}
}