如何避免在失败情况下重复返回 InternalServerError?

How can I avoid the repetition of returning InternalServerError in failure cases?

我正在尝试向我的网络应用程序添加错误处理功能,而不是一直这样做

if err != nil {
   http.Error(w, "Internal Server Error", 500)
   return
}

做这样的事情:

ErrorHandler(err)

我做了这个功能:

func ErrorHandler(w *http.ResponseWriter, err error) {
    if err != nil {
        http.Error(*w, "Internal Server Error", 500)
        // break the go routine
    }
}

但我不知道发生错误时如何中断处理程序

发生错误时不能中断处理程序。有很多方法可以干净地做到这一点,但第一个选项(使用 http.Error)也很不错。

一种选择是将处理程序编写为:

func Handler(w http.ResponseWriter, req *http.Request) {
    err:=func() {
       // Do stuff
       if err!=nil {
         return err
       }
    }()
    if err!=nil {
       http.Error(w, "Internal Server Error", 500)
    }
}

另一种选择是使用类似中间件的模式:

func CheckError(hnd func(http.ResponseWriter,*http.Request) error) func(http.ResponseWriter,*http.Request) {
   return func(w http.ResponseWriter, req *http.Request) {
      err:=hnd(w,req)
      if err!=nil {
         // Deal with the error here
      }
    }
}

然后你可以将其用作处理程序:

CheckError(handler)

哪里

func handler(w http.ResponseWriter, req *http.Request) error {
}