首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误处理中间件-将err转换为字符串以进行响应

错误处理中间件-将err转换为字符串以进行响应
EN

Stack Overflow用户
提问于 2018-10-26 13:38:55
回答 1查看 106关注 0票数 0

我有一个中间件函数:

代码语言:javascript
运行
复制
func errorMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        defer func() {
            if err := recover(); err != nil {
                log.Error("Caught error in defer/recover middleware: ", err)
                w.WriteHeader(http.StatusInternalServerError)
                json.NewEncoder(w).Encode(struct {
                    ID string
                }{
                    err.Error(),
                })
            }
        }()
        next.ServeHTTP(w, r)
    })
}

我这样使用它:

代码语言:javascript
运行
复制
router := mux.NewRouter()
router.Use(errorMiddleware)

然而,我得到了一个编译错误,它说:

有人知道这是怎么回事吗?我只是尝试将err转换为字符串,最终为客户端序列化它,等等。

EN

Stack Overflow用户

发布于 2018-10-26 13:55:57

recover()返回一个没有代理panic()发送的任何值的方法的接口。在defer块中,您试图访问一个纯的、没有方法的接口的Error()方法。如果要区分内置错误类型,则必须断言其类型,如下所示:

代码语言:javascript
运行
复制
realErr, ok := err.(error)
if ok {
    // here you can use realErr.Error().
}

所以它会给你一个error类型的实值。如果您查看built-in types,您将看到error将实现一个Error() string方法。

类型断言:https://tour.golang.org/methods/15

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53002131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档