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 關注
- 152 瀏覽
添加回答
舉報