下面是自定义全局错误处理的例子
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"))
}