一架梯子,一头程序猿,仰望星空!
Golang echo框架面试题 > 内容正文

echo框架怎么进行全局错误处理?


问题简答

echo框架可以通过实现Echo的HTTPErrorHandler接口来实现全局错误处理。可以实现自定义的错误处理,例如统一以json格式返回错误信息。

问题详解:

下面是自定义全局错误处理的例子

package main

import (
    "net/http"
    "strconv"

    "github.com/labstack/echo/v4"
)

func main() {
    e := echo.New()

    // 定义全局错误处理函数
    e.HTTPErrorHandler = func(err error, c echo.Context) {
        // 默认错误码
        code := http.StatusInternalServerError
        // 从错误信息中获取错误码
        if he, ok := err.(*echo.HTTPError); ok {
            code = he.Code
        }
        // 这里获取http错误码对应的文本,实际业务场景可以直接返回自定义错误信息
        errorMessage := http.StatusText(code)
        if err != nil {
            errorMessage = err.Error()
        }
        // 统一以json格式返回错误信息
        _ = c.JSON(code, echo.Map{
            "code":    code,
            "message": errorMessage,
        })
    }

    // 示例路由
    e.GET("/", func(c echo.Context) error {
        return c.JSON(http.StatusOK, echo.Map{
            "message": "Hello, World!",
        })
    })

    e.GET("/error", func(c echo.Context) error {
        code, _ := strconv.Atoi(c.QueryParam("code"))
        // 这里返回http错误信息,携带了指定错误码
        return echo.NewHTTPError(code, http.StatusText(code))
    })

    e.Logger.Fatal(e.Start(":1323"))
}