第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

錯誤處理中間件拋出運行時錯誤

錯誤處理中間件拋出運行時錯誤

Go
DIEA 2023-05-22 15:47:08
我有這個錯誤處理中間件:func Error(next http.HandlerFunc) 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)                originalError := err.(struct{ OriginalError error }).OriginalError                if originalError != nil {                    log.Error("Original error in defer/recover middleware: ", originalError)                }                statusCode := err.(struct{ StatusCode int }).StatusCode                if statusCode != 0 {                    w.WriteHeader(statusCode)                } else {                    w.WriteHeader(http.StatusInternalServerError)                }                message := err.(struct{ Message string }).Message                if message == "" {                    message = "Unknown error message."                }                json.NewEncoder(w).Encode(struct {                    ID string                }{                    message,                })            }        }()        next.ServeHTTP(w, r)    })}
查看完整描述

1 回答

?
躍然一笑

TA貢獻1826條經(jīng)驗 獲得超6個贊

從錯誤消息來看,err對象類型runtime.errorString不是struct { OriginalError error }.?強制類型斷言會產(chǎn)生恐慌。

我認為最好在類型斷言期間使用第二個返回值,以檢查轉(zhuǎn)換過程是否成功。

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,

? ? ? ? })

? ? }

}


查看完整回答
反對 回復 2023-05-22
  • 1 回答
  • 0 關(guān)注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號