拿 php+laravel 来说。任何地方。抛异常。在 exceptionhandler 里就重写返回就行。
go 里边是咋处理的。也是中间件吗?自带的 http.handler 没有自己造个中间件出来?
中间件处理的话。这样?
interface Result { func Ok():any func Err() Err }
interface Err {func Msg() any func Code() int }
struct xx {
}
func (x *xx) Ok() any {
return "xxx"
}
func (x *xx) Err () Err {
return nil
}
func xx() Result {
return &xx{sdfasfafa}
}
1
ccccqqq 44 天前 1
PHPer 不是低级的代名词。
建议仔细阅读 https://learnku.com/docs/guide/smart-questions/2032 如果无法解决,可以尝试访问 https://chatgpt.com/ |
2
ninjashixuan 44 天前
你都 php+laravel 那为什么 go 不 + gin/fiber/echo 等等都有 middleware ,不然就自己造轮子了。
|
3
aarontian 44 天前
go 大把的框架+中间件,直接用就行了
可能 go 唯一麻烦的是得一路 return err ,可以考虑自定义一个兼容 error 的接口然后在 middleware 解析出 error_code 和 message |
4
dyllen 44 天前
你说对了,要用中间件处理,标准库的路由时没有中间件功能的,要么在自己造,要么用现成的框架。
|
5
kidlj 44 天前
Echo 框架:
1. 定义一个 errors package: package errors import ( "fmt" "net/http" "github.com/labstack/echo/v4" ) func ERROR(err error, c echo.Context) { code := http.StatusInternalServerError message := "Internal Server Error" if he, ok := err.(*echo.HTTPError); ok { code = he.Code message = fmt.Sprint(he.Message) } _ = c.JSON(code, echo.Map{ "success": false, "message": message, }) } 2. 将 ERROR 函数指定为 Echo 的统一处理函数: package main e := echo.New() e.HTTPErrorHandler = errors.ERROR 3. 在任意 handler 返回 err: func (h *Handler) createCluster(c echo.Context) error { payload := &ClusterPayload{} err := c.Bind(payload) if err != nil { return echo.NewHTTPError( http.StatusBadRequest, err.Error()) } if err := payload.validate(); err != nil { return echo.NewHTTPError( http.StatusBadRequest, err.Error()) } cluster, err := h.service.CreateCluster(c.Request().Context(), payload) if ent.IsConstraintError(err) { return echo.NewHTTPError( http.StatusBadRequest, err.Error()) } if err != nil { fmt.Println(err) return echo.ErrInternalServerError } return c.JSON( http.StatusOK, echo.Map{ "success": true, "data": cluster, }) } |
6
kidlj 44 天前
虽然我喜欢 V2EX ,打算以后再也不在评论区贴代码了,垃圾。
|
7
wen20 44 天前
# 评论区没格式吗
``` if err != nil { fmt.Println(err) return echo.ErrInternalServerError } ``` |