1 回答
TA贡献1826条经验 获得超6个赞
从错误消息来看,err
对象类型runtime.errorString
不是struct { OriginalError error }
. 强制类型断言会产生恐慌。
我认为最好在类型断言期间使用第二个返回值,以检查转换过程是否成功。
if err := recover(); err != nil {
if temp, ok := err.(struct{ OriginalError error }); ok {
log.Error("Caught error in defer/recover middleware: ", err)
originalError := temp.OriginalError
if originalError != nil {
log.Error("Original error in defer/recover middleware: ", originalError)
}
}
if temp, ok := err.(struct{ StatusCode int }); ok {
statusCode := temp.StatusCode
if statusCode != 0 {
w.WriteHeader(statusCode)
} else {
w.WriteHeader(http.StatusInternalServerError)
}
}
if temp, ok := err.(struct{ Message string }); ok {
message := temp.Message
if message == "" {
message = "Unknown error message."
}
json.NewEncoder(w).Encode(struct {
ID string
}{
message,
})
}
}
- 1 回答
- 0 关注
- 114 浏览
添加回答
举报